node.js异步式IO与事件式编程
生活随笔
收集整理的這篇文章主要介紹了
node.js异步式IO与事件式编程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Node.js最大的特性就是異步式I/O與事件緊密結(jié)合的編程模式。這種模式與傳統(tǒng)的同步式IO線性的編程思路有很大的不同,因?yàn)榭刂屏骱艽蟪潭壬弦渴录突卣{(diào)函數(shù)來(lái)組織,一個(gè)邏輯要拆分為若干個(gè)單元格。
內(nèi)容:阻塞和線程
1.同步式I/O或阻塞式I/O
線程在執(zhí)行中如果遇到磁盤(pán)讀寫(xiě)或網(wǎng)絡(luò)通信,通常要耗費(fèi)較長(zhǎng)時(shí)間。這時(shí)操作系統(tǒng)會(huì)剝奪這個(gè)線程的CPU控制權(quán),使其暫停執(zhí)行,同時(shí)將資源讓給其他的工作線程,這種線程調(diào)度方式成為阻塞,當(dāng)I/O操作完畢時(shí),操作系統(tǒng)將這個(gè)線程的阻塞狀態(tài)解除,恢復(fù)其對(duì)CPU的控制權(quán)、令其繼續(xù)執(zhí)行。
2.異步式I/O或非阻塞式I/O
針對(duì)所有I/O操作不采用阻塞策略,當(dāng)線程遇到I/O操作時(shí),不會(huì)以阻塞的方式等待I/O操作的完成或數(shù)據(jù)的返回,而只是講IO請(qǐng)求發(fā)送給操作系統(tǒng),繼續(xù)執(zhí)行下一條語(yǔ)句,當(dāng)操作系統(tǒng)完成IO操作時(shí),以事件的形式通知執(zhí)行IO操作的線程,線程會(huì)在特定時(shí)候處理這個(gè)事件,為了 處理異步IO,線程必須有事件循環(huán),不斷的檢查有沒(méi)有未處理的事件,依次予以處理。
3.非阻塞與阻塞模式區(qū)別
非阻塞模式下,一個(gè)線程永遠(yuǎn)在執(zhí)行計(jì)算操作,這個(gè)線程所使用的CPU核心利用率永遠(yuǎn)是100%,IO以事件的方式通知。
阻塞模式下,多線程往往能提高系統(tǒng)吞吐量,因?yàn)橐粋€(gè)線程阻塞還有其他線程在工作,多線程可以讓CPU資源不被阻塞中的線程浪費(fèi)。
調(diào)度:當(dāng)前一個(gè)工作,在5分鐘之后執(zhí)行
4.同步式IO與異步式IO區(qū)別
同步式IO(阻塞式)??????????????????????????????????????????????????????????異步式IO(非阻塞)
利用多線程提供吞吐量??????????????????????????????????????????單線程即可實(shí)現(xiàn)高吞吐量
通過(guò)事件片分割和線程調(diào)度利用多核CPU????????????通過(guò)功能劃分利用多核
需要由操作系統(tǒng)調(diào)度多線程使用多核CPU????????????可以將單線程綁定到單核CPU
難以充分利用CPU資源????????????????????????????????????????????可以充分利用CPU資源
內(nèi)存軌跡大,數(shù)據(jù)局部性弱????????????????????????????????????內(nèi)存軌跡小,數(shù)據(jù)局部性強(qiáng)????
?符合線性的編程思維????????????????????????????????????????????????不符合傳統(tǒng)編程思維
總結(jié)
以上是生活随笔為你收集整理的node.js异步式IO与事件式编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Stein算法(求两个数最大公约数)
- 下一篇: 全排列算法解析(视频+详解+代码+STL