Proactor设计模式:单线程高并发
生活随笔
收集整理的這篇文章主要介紹了
Proactor设计模式:单线程高并发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Boost::Asio為同步和異步操作提供了并行支持,異步支持基于前攝器模式,這種模式的優點和缺點可能比只同步或反應器方法要低。讓我們檢查一下Boost::Asio是如何實現前攝器模式的,沒有引用基于平臺的細節。前攝器設計模式,改編自POSA2--異步操作定義一個異步執行的操作,比如socket的異步讀和異步寫。--異步操作處理器執行異步操作并在操作完成的時候把事件入隊到一個完成事件隊列,stream_socket_service等服務可以抽象成異步操作處理器。--完成事件隊列緩存完成事件直到他們被異步事件分解器取出隊列。--完成句柄處理異步操作的結果,是函數對象,經常使用boost::bind創建。--異步事件多路分解器阻塞等待完成事件隊列,直到有事件發生,并返回一個完成事件給調用者。--前攝器調用異步事件分解器來把事件出隊列,并且分發給同事件關聯的完成句柄(調用函數對象),這個抽象層的代表是io_service層。--發起者應用程序的代碼啟動了異步操作,發起者通過一個抽象的接口來和異步操作處理器交互,比如basic_stream_socket,輪流提供類似于stream_socket_service的服務。使用Reactor的實現在許多平臺,Boost::Asio依照Reactor的方式實現Proactor,比如select、epoll、kqueue,下列方法符合Proactor的設計模式:--異步操作處理器一個使用select、epoll、kqueue實現的Reactor,當Reactor指示資源已經準備好執行操作,處理器執行操作并把完成時間隊列關聯的完成句柄入隊列。--完成事件隊列完成句柄的列表(函數對象)。--異步事件多路分解器等待事件或者條件變量直到完成事件隊列的完成句柄可用。使用windows平臺overlapped I/O實現在windowsNT、2000或者xp,Boost::Asio利用overlapped的優勢來實現有效的Protacor模式,下列是符合Proactor模式的方法:--異步操作處理器操作系統提供支持,通過調用AcceptEx之類的操作來發起操作。--完成事件隊列操作系統提供支持,并和I/O完成端口關聯起來,--異步事件多路分解器被Boost::Asio調用來出隊列事件和他們的關聯完成句柄。優勢--可移植的許多操作系統支持一個原生的異步I/O API作為高性能網絡開發的推薦操作,這些庫可能依據原生異步I/O的實現,然而,如果原生API不可用,這些庫也可能使用典型Reactor模式的異步事件多路分解器來實現,比如POSIX select()。--從并發中解耦線程耗時長的操作被應用程序異步執行,因此應用程序不需要啟動大量線程來提高并發--性能和擴展性某些實現策略會降低系統性能,比如每個線程一個連接,因為增加了CPU間的上下文切換、同步、數據移動,通過異步操作可以避免或者減少上下文切換開銷-最小化操作系統的線程-限制資源-只激活有事件要處理的控制線程。--簡單的應用同步異步完成句柄就像是在一個單線程環境寫入,因此應用程序開發過程中可以少考慮或者不考慮同步問題。--函數構成函數構成依據函數的實現來提高更高抽象的操作,比如發送一個特定格式的消息,每個函數多次調用來完成較低抽象的讀、寫操作。例如,一個協議的每個消息包含一個定長的消息頭和變長的消息體,消息體的長度被消息頭指定,一種假設是用兩個低抽象的讀、寫操作完成消息的讀取,第一個接收消息頭,一旦消息長度確定,第二個接收整個消息。為了寫作異步模式的函數,異步操作可以被連接起來,也就是說,一個操作上的完成端口可以啟動另外一個,啟動鏈條的第一個可以被包裝起來,調用者不需要知道高級抽象操作作為一個異步操作的鏈條來實現。這種編寫方式簡化了開發者在網絡庫上的高層抽象,比如為了支持某種協議而開發函數。劣勢--編程復雜性使用異步模式開發應用程序更加困難,因為從時間和空間來看啟動和完成被分割開來,因為控制流反轉應用程序更難被調試。--內存使用在讀、寫期間內存是一直占用的,這會帶來不確定性,在每個并發的時候需要一個單獨的buffer,而Reactor模式,在讀、寫就緒前并不需要緩存空間。參考文獻[POSA2] D. Schmidt et al, Pattern Oriented Software Architecture, Volume 2. Wiley, 2000.?
轉載于:https://www.cnblogs.com/learn-my-life/p/5268424.html
總結
以上是生活随笔為你收集整理的Proactor设计模式:单线程高并发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源的excel读取库libxls在wi
- 下一篇: 全社会有效需求不足分析