1. 程式人生 > >node裡只有js引擎是單執行緒,不代表整個node都是單執行緒

node裡只有js引擎是單執行緒,不代表整個node都是單執行緒

這裡是摘要一下關鍵的話:

我們可以用Ajax和Web Worker迴應這個誤解(javascript是單執行緒的,無法很好利用多核CPU)。當Ajax請求傳送之後,除非是同步請求,否則其餘的JavaScript程式碼會很快被執行到。在Ajax傳送完成,直到接收到響應的這段時間裡,這個網路請求並不會阻塞JavaScript的執行,而網路請求已經發生,這是必然的事。那麼,答案就很明顯了,JavaScript確實是執行在單執行緒上的,但是,整個Web應用執行的宿主(瀏覽器)並非以單執行緒的方式在執行。而Web Worker的產生,就是直接為了解決JavaScript與UI佔用同一執行緒造成的UI響應問題的,它能新開一條執行緒去執行JavaScript

同理,NodeJS中的JavaScript也確實是在單執行緒上執行,但是作為宿主的NodeJS,它本身並非是單執行緒的,NodeJS在I/O方面有動用到一小部分額外的執行緒協助實現非同步。程式設計師沒有機會直接建立執行緒,這也是有的同學想當然的認為NodeJS的單執行緒無法很好的利用多核CPU的原因,他們甚至會說,難以想象由多人一起協作開發一個單執行緒的程式