多執行緒併發程式設計(一)

2021-10-05 21:18:10 字數 754 閱讀 8089

在解決多執行緒併發帶來的效能問題時,我們首先想到的一定是執行緒池。但配置執行緒池的幾個關鍵引數時,必須基於生產環境系統資源以及線上流量,設定合理的引數值。執行緒數量設定太小,會導致程式不能充分地利用系統資源;執行緒數量設定太大,又可能帶來資源的過度競爭,導致上下文切換造成額外的系統效能開銷。尤其執行緒數量設定過大,最糟糕的情況就是會導致系統奔潰。其中特別提到的「上線文切換」指什麼呢,這裡簡單說明下,首先必須先說明下cpu時間片的概念。

以往在單個處理器的時期,作業系統已經能處理多執行緒併發任務。處理器給每個執行緒分配 cpu 時間片,執行緒在分配獲得的時間片內執行各自的任務。cpu 時間片是 cpu 分配給每個執行緒執行的時間段,通常為幾十毫秒。在這麼短的時間內發生執行緒切換,我們根本感知不到,所以給我們的感覺就是這些執行緒在同時進行。

時間片決定了乙個執行緒可以連續占用處理器執行的時長。當乙個執行緒的時間片用完了,或者因自身原因被迫暫停執行了,那麼這個時候,會有另外乙個執行緒(可以是同乙個執行緒或者其它程序的執行緒)就會被作業系統選中來占用處理器。這種乙個執行緒被暫停剝奪使用權,另外乙個執行緒被選中開始或者繼續執行的過程就叫做上下文切換

協程又是一種輕量級資源,即使建立了上千個協程,對於系統來說也不是很大的負擔,相反如果在程式中建立上千個執行緒,那系統可就真會面臨奔潰的邊緣了。因此協程的設計方式避免了因為系統資源的競爭,時間片的限制而導致的執行緒相互切換帶來的效能損耗,從而極大地提高了執行緒的使用率。

多執行緒併發程式設計

docker 可謂是開啟了容器化技術的新時代,現在無論大中小公司基本上都對容器化技術有不同程度的嘗試,或是已經進行了大量容器化的改造。伴隨著 kubernetes 和 cloud native 等技術和理念的普及,也大大增加了業務容器化需求。而這一切的推進,不可避免的技術之一便是構建容器映象。在本場...

多執行緒併發程式設計

程序是乙個執行的程式,程序裡面有多個執行緒,執行緒是程序中負責執行的程式的一執行單元,執行緒本身是依靠程式進行執行的,執行緒是程式中乙個順序控制流。執行緒分為單執行緒和多執行緒。多執行緒能更好利用cpu資源。以前單程序的,時間片切換 多執行緒實現方式 繼承thread,實現runnable。exec...

併發程式設計 多執行緒

目錄程序是作業系統可以排程已經進行資源分配的基本單位,是乙個資源單位,其中包含了執行這個程式所需的資源 特點 系統會為每乙個程序自動建立一條執行緒,稱之為主線程,後續通過 開啟的執行緒稱之為子執行緒 計算機是乙個工廠,程序就是乙個車間,執行緒就是車間內的流水線 item 程序執行緒 單位資源單位 執...