I/O事件處理模型之Reactor和Proactor

來源:互聯網
上載者:User
Reactor模型

Reactor模式是處理並發I/O比較常見的一種模式,中心思想就是,將所有要處理的I/O事件註冊到一個中心I/O多工器上,同時主線程阻塞在多工器上;一旦有I/O事件到來或是準備就緒(區別在於多工器是邊沿觸發還是水平觸發),多工器返回並將相應I/O事件分發到對應的處理器中。

這裡有三個重要的組件:

  • 多工器:由作業系統提供,在linux上一般是select, poll, epoll等系統調用。
  • 事件分發器:將多工器中返回的就緒事件分到對應的處理函數中。
  • 事件處理器:負責處理特定事件的處理函數。

因為這種模型經常使用,所有不少人對簡單的系統調用做了一層封裝,形成跨平台的事件處理庫,比較典型的有:libevent,libev,boost
asio等。

Proactor模型

與Reactor模型相對應,Proactor最大的特點是使用非同步I/O。所有的I/O操作都交由系統提供的非同步I/O介面去執行。Proactor多工器等待非同步I/O完成,並調用相應的使用者處理函數。為了對比Reactor模型,以一個read操作為例:

在Reactor中:
  • 將要讀的檔案描述符註冊到多工器中。
  • 多工器等待上述描述符的可讀事件以及其它所有已經註冊過的事件。
  • 描述符變成可讀之後,多工器返回,並調用使用者提供的處理函數,開始讀檔案操作。
在Proactor中:
  • 使用者函數啟動一個非同步讀檔案的操作。同時將這個操作註冊到多工器上。多工器並不關心檔案是否可讀而是關心這個非同步讀操作是否完成。
  • 非同步讀檔案是作業系統完成,使用者程式不需要關心。多工器等待直到有完成通知到來。
  • 當作業系統完成了讀檔案操作——將讀到的資料複製到了使用者先前提供的緩衝區之後,通知多工器讀操作已完成。
  • 多工器再調用相應的處理常式,處理資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.