Linux的非同步傳輸模式及ACE的Proactor模式

來源:互聯網
上載者:User

  Reactor是工作在同步模式下,Proactor工作在非同步模式下。高效能伺服器一定是工作在非同步模式下的。所以,ACE中有Proactor這個類組。ACE的特點是跨平台和屏蔽技術細節,Proactor應該是編寫一份代碼,同時可以在Linux和Windows及其它作業系統上運行。實際開發中,我們發現,Proactor編寫的服務程式在Windows下工作非常正常,在核心為2.6.X的Linux上就工作不正常,比如,客戶的Connect操作就不能返回,經過檢查,write和read必須成對出現才會工作正常,這也就是說,比如一個伺服器註冊到管理伺服器,管理伺服器不定期將控制指令發到子伺服器上將不能實現,這是致命的。
  經過研究發現,原來ACE中的Proactor在Unix上是使用Posix標準實現的非同步作業,Posix中有一個AIO,Proactor使用AIO實現非同步傳輸。但Linux在2.6以前版本中不支援AIO,而在2.6版本以後,部分支援AIO。就因為這個部分支援,所以,Posix的子類不能正常工作。
  經過調研,ACE的開發人員們知道這個情況,但是他們沒有採取什麼措施。自己想一想,Unix的平台不止一個Linux,而Linux多支援Posix標準,使用這樣的解決方案是很理想化的。Linux早晚也會完全支援Posix的。就目前這種情況,ACE的開發人員提出一個解決方案,就是TProactor,是另外一個人開發的解決方案。這個方案是將ACE中的Posix系列類重新實現,用線程和select類比非同步作業。這種方案也不錯,但ACE沒有包含這種解決方案,我個人認為這是ACE的開發人員們堅持理想、追求完美。
  經過嘗試TProactor安裝比較麻煩,後來我又嘗試了Posix_AIO,就是將AIO類比實現的一個解決方案,使用這個解決方案連ACE中的類都不會替換,只需要在ACE的Makefile中libPosix_AIO.a這個庫加進去就行了。 
  最後我是解決了這個問題,想必有很多使用ACE的Proactor的同道會遇到這個問題。現在我的系統是ACE+TProactor和Posix-AIO一起解決的。

轉自: http://blog.newsfan.net/leelin/archive/2007/01/14/7248.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.