併發程式設計的目的是讓程式「同時」執行多個任務。若程式是計算密集型的,併發程式設計並沒有優勢,相反由於任務的切換使得效率降低。但如果程式是i/o密集型的,比如經常讀寫檔案,訪問資料庫等,則情況不同。由於i/o操作的速度遠沒有cpu計算的速度快,所以當程式阻塞於i/o操作將浪費大量cpu時間。
併發模式是指i/o處理單元和多個邏輯單元之間的協調完成任務的方法。
併發模式中,「同步」指的是程式完全按照**序列的順序執行;「非同步」指的是程式的執行需要由系統事件來驅動。
以非同步執行緒執行的程式相對複雜,難於調適和擴充套件,並且不適合於大量的併發。同步執行緒則相反,程式效率相對較低,實時性較差,但邏輯簡單。
同步執行緒用於處理客戶邏輯,相當於邏輯單元;非同步執行緒用於處理i/o事件,相當於i/o處理單元。
half-sync / half-reactive事件處理模式是reactor模式:要求工作執行緒自己從socket上讀取客戶請求和往socket寫入伺服器應答。主線程:非同步執行緒。負責監聽所有 socket上的事件。
工作執行緒:同步執行緒。所有的工作執行緒都休眠在請求佇列上,當有任務到來,它們通過競爭獲得任務的接管權。
缺點:
每個執行緒都是非同步執行緒,故並非嚴格意義上的半同步/半非同步模式。主線程:非同步執行緒。只負責管理監聽socket(listen_socket)。當有新的連線請求到來,主線程接受連線請求得到新的連線socket,並將新返回的連線socket派發給某個工作執行緒。
工作執行緒:非同步執行緒。負責管理請求socket(connected_socket)。主線程向工作執行緒派發新的連線socket後,工作執行緒負責該socket的任何i/o操作,直到客戶端關閉。
參考:《linux高效能伺服器程式設計》 遊雙
半同步半非同步模式
在io模型中 同步和非同步的區分在於核心向應用程式通知的是和種io事件,同步模式下通知的是就緒事件,非同步通知的是完成事件,以及到底是誰來完成i o讀寫,同步模式下由應用程式來i o讀寫完成,而非同步模式下由核心幫我們完成i o讀寫。在併發模型中 同步指的是程式完全按照 的順序執行 非同步指的是程式...
高效併發模式,半同步半非同步和領導者追隨者
首先來看同步與非同步到底是什麼呢?在計算機領域,同步就是指乙個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去 非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其他程序的狀態。當有訊息返回時系統會通知程序進行處理,這...
網路程式設計學習 設計模式 半同步半非同步模式
設計模式大部分都是扯蛋的,真正有用的不多,廣泛應用的更少寥寥無幾,半同步半非同步 half sync half async 正是其中之一 一 同步和非同步的問題 同步 編碼簡單,邏輯清晰,但效率低 非同步 效率高,但結構複雜,需處理各種時序和競爭問題 對於網路通訊來說非同步可以避免大量的阻塞,提高效...