協程、IO模型
阿新 • • 發佈:2018-07-17
locking class 階段 目的 sync 等待 size 內核 異步
一、協程
1.定義:
單線程實現並發,可以再應用程序當中控制多個任務的切換+保存狀態。
優點:在應用程序級別的速度要遠遠高於操作系統的切換
缺點:多個任務一旦有一個任務阻塞住了,沒有及時切換,整個線程都將阻塞在原地,該線程內的其他任務都不能繼續執行了。
所以,在引入協程之後,就需要檢測單線程下所有的IO行為,必須實現一旦遇到IO就立即切換,少一個都不行,因為一旦遇到一個任務阻塞住了,其它的任務都將阻塞住,及時其余的線程都是可以計算的,它們也是無法繼續執行了。
2.協程的目的
程序想要能夠在單線程下實現並發,並發即指的是多個任務看起來是同時執行的。
協程的並發=切換+保存運行暫停時的狀態
二、IO模型
分類:阻塞IO ( blocking IO)
非阻塞IO( nonblocking IO)
IO多路復用( IO multiplexing)
異步IO( asynchronous IO)
IO發生時涉及的對象和步驟:
對於一個network IO (這裏我們以read舉例),它會涉及到兩個系統對象,一個是調用這個IO的process (or thread),另一個就是系統內核(kernel)。當一個read操作發生時,該操作會經歷兩個階段。
#1 等待數據準備 (Waiting for the data to be ready) #2 將數據從內核拷貝到進程中(Copying the data from the kernel to the process)
1.阻塞IO
待更。。。
協程、IO模型