一直令我糾結的問題,關於“線程”與“阻塞”


這個問題有可能是我個人的疑惑,或許其他人一看就明白,人總有轉不過彎的時候!

 

NodeJS是單線程的異步操作,在書上講這一點的時候往往會拿出常規的做法來與之對比:單線程的阻塞操作。

書中寫道:

 

線程在執行中如果遇到磁盤讀寫或網絡通信(統稱為 I/O 操作),
通常要耗費較長的時間,這時操作系統會剝奪這個線程的 CPU 控制權,使其暫停執行,同
時將資源讓給其他的工作線程,這種線程調度方式稱為 阻塞。當 I/O 操作完畢時,操作系統
將這個線程的阻塞狀態解除,恢復其對CPU 的控制權,令其繼續執行。

 

比如單線程中遇到一個讀取txt文件的操作,按照上面的說法,此時該線程的CPU控制權被剝奪了。當這個操作完成后該線程再重新擁有CPU控制權。

我大感不解:既然失去了CPU,那這個對txt的處理是誰做的呢,難道還有另外一個CPU不成? 

 

我一直認為計算機上所有執行的操作全都是CPU來完成,其實不然。就拿讀取硬盤上的某txt文件來說,CPU發出讀取txt指令,但具體的讀取操作並

不是CPU去做的,而是硬盤去做的。CPU只是負責把指令送到數據總線,是其它設備接到命令並按照CPU的要求去處理數據,然后再把數據送來到

總線接口處。此時通知CPU,CPU才會再次接手工作對數據進行下一步操作。

 

我對這個解釋還是比較滿意的,如果有問題希望大家多多指出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM