首先來看同步與非同步到底是什麼呢?
在計算機領域,同步就是指乙個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去;非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其他程序的狀態。當有訊息返回時系統會通知程序進行處理,這樣可以提高執行的效率。
而我們平時經常討論的同步問題多發生在多執行緒環境中的資料共享問題。即當多個執行緒需要訪問同乙個資源時,它們需要以某種順序來確保該資源在某一特定時刻只能被乙個執行緒所訪問,如果使用非同步,程式的執行結果將不可預料。因此,在這種情況下,就必須對資料進行同步,即限制只能有乙個程序訪問資源,其他執行緒必須等待
同步和非同步的概念對於很多人來說是乙個模糊的概念,是一種似乎只能意會不能言傳的東西。其實我們的生活中存在著很多同步非同步的例子。比如:你叫我去吃飯,我聽到了就立刻和你去吃飯,如果我沒有聽到,你就會一直叫我,直到我聽見和你一起去吃飯,這個過程叫同步;非同步過程指你叫我去吃飯,然後你就去吃飯了,而不管我是否和你一起去吃飯。而我得到訊息後可能立即就走,也可能過段時間再走。
高效模式::
在每個工作執行緒中利用epoll lo復用技術,可以同時監聽多個事件,非同步主線程負責監聽鏈結事件,當事件到來後,傳入到工作執行緒,工作執行緒將該socket註冊到自己的epoll核心登錄檔中,這樣,這樣每個工作執行緒都能處理多個客戶連線了
半同步/半非同步:
高效的半同步半非同步模式
半同步半反應堆:
其中和半同步和半非同步的唯一區別就是,工作執行緒的選擇,半同步半非同步是根據演算法和時間來選擇由那個工作執行緒負責處理到達請求佇列的socket事件,而半同步半反應堆則是由許多任務作執行緒共同來競爭,勝者負責處理該socket事件。
高效的半同步/半反應堆模式
半同步/半反應堆模式因為也是主線程和工作執行緒共享任務佇列,所以也會存在與半同步/半非同步模式一樣的問題,就是每次對佇列進行操作,都需要進行加鎖,從而消耗cpu的時間。而且乙個執行緒同一時間只能處理乙個客戶請求,如果佇列中積累了很多任務,增加工作執行緒的話,工作執行緒的切換也會耗費大量cpu時間。
領導者追隨者模式:
高效併發模式 半同步 半非同步模式
併發程式設計的目的是讓程式 同時 執行多個任務。若程式是計算密集型的,併發程式設計並沒有優勢,相反由於任務的切換使得效率降低。但如果程式是i o密集型的,比如經常讀寫檔案,訪問資料庫等,則情況不同。由於i o操作的速度遠沒有cpu計算的速度快,所以當程式阻塞於i o操作將浪費大量cpu時間。併發模式...
半同步半非同步模式
在io模型中 同步和非同步的區分在於核心向應用程式通知的是和種io事件,同步模式下通知的是就緒事件,非同步通知的是完成事件,以及到底是誰來完成i o讀寫,同步模式下由應用程式來i o讀寫完成,而非同步模式下由核心幫我們完成i o讀寫。在併發模型中 同步指的是程式完全按照 的順序執行 非同步指的是程式...
網路程式設計學習 設計模式 半同步半非同步模式
設計模式大部分都是扯蛋的,真正有用的不多,廣泛應用的更少寥寥無幾,半同步半非同步 half sync half async 正是其中之一 一 同步和非同步的問題 同步 編碼簡單,邏輯清晰,但效率低 非同步 效率高,但結構複雜,需處理各種時序和競爭問題 對於網路通訊來說非同步可以避免大量的阻塞,提高效...