[英]Interrupt driven vs Event Driven I/O model
在閱讀Node JS時,定義說I / O模型是事件驅動的。 這與多線程環境中的中斷有何不同? 在多線程環境中,當I / O操作完成時,會生成一個中斷,並且等待線程現在被推入讀取運行狀態。 在Node Js中,基於I / O完成后拋出的事件,回調處理程序被推送到事件Queue。
為什么兩者不同?
我不確定我是否理解這個問題,但我理解......
這兩個概念的不同之處在於它們適用於不同級別的處理。 事件的使用級別(系統/代碼)高於中斷,后者發生在較低級別(CPU)。 因此,即使中斷確實發生在CPU級別,nodejs也會抽象它們(使用單獨的I / O線程),如果已定義,它將執行回調。 多線程環境(例如Java)的作用是暫停和恢復線程。 這與CPU級中斷不同。 Java確實讓程序員實現了這樣的中斷:
for (int i = 0; i < importantInfo.length; i++) {
// Pause for 4 seconds
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// We've been interrupted: no more messages.
return;
}
// Print a message
System.out.println(importantInfo[i]);
}
但這根本不像CPU中斷或nodejs事件/回調。
即使nodejs被稱為單線程,它確實使用多個線程,但是它只使用一個主線程,該線程旨在花費很少的時間在CPU上並將其他IO或CPU密集型任務傳遞給其他任務,因此可能准備好處理下一個(通常是http)請求
一些參考鏈接:
http://www3.ntu.edu.sg/home/ehchua/programming/java/J5e_multithreading.html
http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
https://softwareengineering.stackexchange.com/questions/298493/nodejs-like-interrupt-handlers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.