怎樣運用pipe更為便捷地實現執行緒池

2021-09-12 19:44:31 字數 702 閱讀 8469

先討論一下pipe的原子性問題,具體而言就是多個寫執行緒寫乙個pipe,同時多個讀執行緒讀這個pipe

只要pipe中有資料,read就不會阻塞,不會阻塞就不會在讀的中途被換出,也就能確保原子性。

要達到上述目的,乙個簡單的做法就是write的資料量是read的資料量的倍數或相同。這樣read就不會在讀到一半的資料時被阻塞。

只要pipe中未滿,write就不會阻塞,不會阻塞就不會再寫的中途被換出,也就能確保原子性。

但是如果read不讀取資料,pipe始終會被寫滿,而且很可能write寫到中途,pipe滿,被阻塞換出。

但實際上核心能確保寫 pipe的原子性,只要一次寫的大小小於pipe_size,寫pipe一定是原子的,發生上述問題write雖然被換出,但當pipe不為空時,核心確保換入的執行緒是剛才換出的還沒有寫完的執行緒。

所以在使用pipe時會遇到read和write的原子性問題,但是只要確保讀寫資料量相同,就不會存在讀寫到一半就會被換出的問題。

所以我們也可以利用pipe便捷地實現執行緒池。

執行緒池一般分為兩個部分:多個計算執行緒和乙個任務佇列。對於任務佇列的實現,一般常用的做法是使用條件變數。我們也可以使用pipe簡單的地實現乙個任務佇列。

我們用pipe傳遞指向任務的指標,由於指標始終是4個位元組,讀寫管道的位元組數相同,確保了read管道的原子性,且4

怎樣使用spark的pipe呼叫外部程式

spark在rdd上提供pipe 方法。spark的pipe 方法可以讓我們使用任意一種語言實現spark作業中的部分邏輯,只要它能讀寫unix標準的流就行。通過pipe 你可以將rdd中的各元素從標準輸入流中以字串形式讀出,並對這些元素執行任何你需要的操作,然後把結果以字串的形式寫入標準輸出 這個...

IT戰略規劃怎樣做得更務實

現代企業的it規劃在通常意義上的分為 廣義 的和 狹義 的。所謂 廣義 的it規劃是指從企業的戰略出發,充分分析企業核心價值鏈的運作模式,進而找出it的支撐點和機會點,從而明晰企業的it戰略,並構築企業的it應用藍圖 it治理模式 資訊資源體系及系統實施規劃等,以實現對企業戰略目標達成的有效支援。而...

TED 怎樣戒掉壞習慣,變得更自律?

自律跟多巴胺神經傳遞有關,而多巴胺釋放更多的是期望而不是獎勵。多巴胺在期望中才會增加,這也是多巴胺讓我們對乙個目標採取行動的原因。多巴胺在驅使我們行動上發揮作用 邊緣靶 及時行樂 前皮質靶 延遲行樂 什麼導致大腦把多巴胺更多的都傳輸到邊緣靶還是前皮質靶?這決定於我當下的情緒,環境,基因,荷爾蒙,過去...