1. 程式人生 > >協程、IO模型

協程、IO模型

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模型