leader follower, 半同步半非同步 和 事件驅動的關係是什麼?

時間 2021-06-01 12:08:02

1樓:張倩

我認為這篇文章對同步,非同步,阻塞,非阻塞的概念講解的非常清楚。

2樓:

網路程式設計中一般常見的epoll_wait + 非阻塞的I/O的事件驅動模型都是同步I/O,epoll只是提供了一種高效的I/O多路復用機制

在這種語境下,非同步I/O在linux下指的是aio庫,在windows下指的是iocp完成埠

3樓:jamesr

kircher-schwanninger.de

/michael/publications/lf.pdf

主要矛盾是吞吐量和消耗的資源。併發可以提高吞吐量,是因為計算可以在等IO的時間進行,常用的併發方式是開執行緒,通過記憶體換CPU時間,從而換吞吐量。但是,有很多執行緒都在對同乙個物件進行IO,還不如讓少數執行緒進行IO省資源。

半同步/半非同步就是一種思路:

簡單的說,半同步/半非同步的模式,是在IO執行緒層面非同步,把資料塞進乙個同步佇列,然後demultiplexing,一堆執行緒同步地處理資料。這個模型中,IO層面用非同步,相比乙個執行緒乙個鏈結的模式,省去了很多執行緒維護開銷,但由於佇列資源是執行緒共享內容,在進佇列/出佇列的時候,免不了會有race condition。

leader/follower解決的問題主要就是IO demultiplexing中不夠有效率的地方,leader執行緒去監聽IO,避免多個執行緒監聽造成的race condition,有資料需要處理時,如果自己處理,就叫其他空著的follower去做leader;如果要follower處理,自己可以繼續做leader。任何時間,系統都只有乙個leader執行緒在監聽IO,而處理IO的,可以有多個執行緒(通常是乙個執行緒池)。當所有執行緒在忙的是,IO事件會自動排隊,等待leader空出來處理。

題主的問題我理解的是,follower工作的模式是否必須要同步,不可以非同步(事件驅動)嗎?

我的回答是,當然可以了。主要看你解決了什麼樣的問題:如果follower需要等待很多IO,則follower也可以用非同步(實際也成為二級leader了)。

但通常的場景是,follower只處理乙個IO,follower阻塞時,執行緒池裡面的其他follower會出來工作啊,所以使用同步更加簡單。再次注意,leader/follower模式解決的問題是IO demulitplexing,你沒有demultiplexing的需求時,本來就服務乙個物件,該等待還是得等待,沒有其他物件等著需要服務,為啥要非同步?

另外,阻塞和非同步不是同乙個概念,並不是說非同步就沒有阻塞了,IO該阻塞的還是得阻塞,同步下是連同處理IO的執行緒一起阻塞,而非同步是乙個IO的阻塞不會影響到其他IO(核心通過EAGAIN告訴你,IO阻塞了一會兒再來試試),從而使得單一執行緒就可以服務多個IO。而實現非同步的方式,在Linux上就是基於事件通知方式,早期是O(n)的select,現在是效率更高O(1)的epoll;不用事件驅動,就要消耗CPU不斷地去read/write問,想睡覺又不知道睡多久,不經濟。

P.S. 很多概念還是有混淆的危險,怕沒說清楚,稍微整理下。

- 執行緒的同步說的是不同執行緒間交換資源需要保證的記憶體一致性。

- IO的同步/非同步說的是IO讀寫模式是否是阻塞模式,非阻塞模式下,乙個IO的阻塞不會引起執行緒的阻塞,執行緒還可以處理其他IO和進行運算;阻塞模式下,IO阻塞了,執行緒就睡覺去了。

- 事件驅動+同步IO有什麼意義嗎?反倒是非同步IO需要事件驅動,所以談論事件驅動,通常語境下等同於談論非同步IO。同樣,事件驅動下執行緒的阻塞和IO的阻塞不是一回事,事件驅動的阻塞是真沒事幹可以睡覺去了;而IO的阻塞是乙個裝置還沒準備好要等,同時很可能其他裝置已經準備好了,不一定沒事做。

半透半反鏡原理?

武漢索博特光電 一下子能想到的幾種半透半反的方式,偏振分光,介質膜分光,點陣金屬膜偏振分光就是利用光的偏振的原理,這種大多數是45度反射,反射S光而透射P光,配合半波片對入射光的偏振狀態進行調節,理論上可以對反射光和透射光進行無極調節 如果入射光是自然光基本就是半透半反 另外還有一種消偏振的分光鏡,...

《半聯動點》和《半聯動》之間有什麼關係,還有什麼《半聯動位置》,什麼意思?大神們通俗一點啊 ?

已重置 所謂半聯動,就是離合器介於離與合之間,傳動系統介於聯與不聯之間的狀態,它可以提供一種柔性的動力,在一些複雜路況以及起步 轉彎和短距離跟進等會經常使用。一些駕駛者由於不了解離合器原理,錯誤操作,導致離合器片損毀 衣海雷 車輛能走是因為發動機在轉,轉動就是提供動力。但是車輛可以控制走或者不走,就...

為什麼有的人喜歡半 English 半 Chinese 講話?

flangerspg 我個人認為這是多種語言的思維系統的相容問題。簡單介紹一下我的語言背景。我會說三種語言 漢語,英語和日語。漢語是我的母語。出國留學時學了英語。根據雅思的評分標準我的英文水平處於good與very good之間。日語是在大學裡學的剛剛入門,勉強可以簡單的和人交流。下面我想結合我的個...