一些概念:同步、異步、協程

同步

同步:指的一些處理流程在某一時刻/時段內進行順序執行。常見的有線程的同步,這裏的同步是對於線程來說的,因爲他們會去訪問修改同一部分資源,線程之間在某個時間段內是可以交叉執行,這就有可能造成數據數據混亂,所以這裏了就是需要進行同步的操作,要進行順序執行。可以理解爲排隊(訪問修改)共享資源,以達到順序的目的,這樣一條隊伍(現實中的隊伍)中的各個線程(軍訓中的人)也就是步調一致了,同步也就是這麼來了的。

擴展到網絡應用中,對於開啓的單進行單線程 ' tornado的服務 ',每一個時刻只能處理一個請求,而其他請求就要類似於排隊等待的,也就是同步的進行。假如單個請求處理時間過長,隊伍中的其他所有請求就會需要等待更多時間,這是網絡應用中所不希望的,也就是長時間的處理流程不需要同步,要異步進行,如下。

異步

異步:指的是 在同一時刻/時間段,一些處理流程是併發執行 (並行,同一時刻發生。併發,同一時間段發生),也就是一個時間段內可以處理多個流程。這些流程並不一定是順序進行的(指在這一時間段內),而是存在交叉的的執行的,也就是說一個流程在沒處理完的時候,可以去處理另外一個流程,流程間的步調是不一致的,也就是不同步,所以就是異步的。

一些自帶同步、異步特性的東西

線程/進程: 在線程之間或進程之間,默認就是異步的,也就是在一個時間段內,可以有多個線程或是進程執行,這是操作系統賦予的能力。

線程內的程序片段:一些線程內的代碼片段 默認就是順序執行的,也就是某一時間段內只能執行某一個代碼片,更大的時間段內的多個代碼片是順序執行的,也就是默認的同步。

一些問題:正如上面所講,一些具體的應用中,上面的默認設定並不能滿足玩家的需求!例如:想要多線程處理某些工作,但是在某些地方並不想異步處理。想要提高併發數量,但是呢在某一個時間段內並不想僅僅只處理一個流程。

所以一些人就開始尋求各種方式進行改變!,所以也就有了一些經典的問題!例如:線程的同步,網絡應用中的異步操作等,下面會進行一些說明。

線程的同步: 如果是想限制 某一個時間片內(處理流程操作時間)(共享位置) 只能 有有限個處理流程進行處理,,理想的操作時,如果是限制數量是一個的話,就是用鎖,如果限制數量是多個的話就使用信號量。要佔用這段時間片/共享位置 的話需要申請 鎖 或信號量,這樣就能限制了同時訪問的數量,如果是一個的話,就是同步的了。

網絡應用中的異步(併發的實現):通常有些會默認使用系統提供的併發能力,如上所說,開多個進程,多個進程中開多個線程,以此提高併發能力。然而操作系統資源畢竟有限,一般只是一個線程內部只能處理一個流程。如果處理的慢,效果看起來並不理想,所以一些人就想在線程內,模擬操作系統的一些做法,在線程內的處理流程中進行中斷執行(中斷的位置通常是IO的位置),去執行其他操作,以此達到多流程交叉執行的目標,因此就出現了協程的概念,也就是一個線程內的多個程序片段 同時(併發)執行(cpu 還是一個刻只能處理一個流程的)。

協程:上面已經對其有了描述,這裏要說的是協程 其本質就是將線程內的同步程序進行再次分割,以此達到更小粒度提高併發,提高cpu 的利用率或是網絡中的併發量。這裏的分割,也就是同步程序執行的中斷。下面會有一些例子進行更好的理解:

這裏要有python 的協程的實現,或是一些 庫的使用。

異步,併發:其本質就是將一些I/O (網絡IO、磁盤IO)所用的時間進行重疊,以到達 同一時間段內處理多個任務(這裏CPU處理的真正的時間很短 ,忽略。多個任務處理,即使是併發,總時間也是多於單個任務處理的,這裏是近似相等),

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章