多執行緒程式設計的思考

2021-07-24 22:53:23 字數 1110 閱讀 3538

bestboyxie 勵志做一名能幫助到他人的程式設計師,如果你覺得這篇文章對你有幫助,麻煩你點讚

其實學習多執行緒程式設計已經是很多年前的事情了真正用到多執行緒的應用場景並不多,總體上說來我覺得多執行緒有一下幾個方面的思考

1。為什麼要用多執行緒。

其實很多時候,學習多執行緒程式設計的時候,總是寫了些莫名其妙然並卵的**,並不能真正的表達多執行緒的意思。

例如網路程式設計,其實如果真的沒有達到一定數量級完全可以用epoll一類的多路io復用來解決問題。神馬乙個執行緒處理乙個連線,本身就是浪費資源。

使用多執行緒,就是來完成單執行緒無法完成的事兒~。總結起來有一下幾個方面的內容:

1。處理中有等待i/o的慢操作或者阻塞的操作。例如要讀、寫磁碟檔案~~

2。在多核操作下,充分的利用cpu的效能。

3。把乙個功能模組單獨出來作為乙個執行緒存在

除此之外,我暫時沒有想到太多的應用場景。總結起來:為了效能,為了功能隔離

其實學習多執行緒的操作中幾個必須要關注的點兒

1。執行緒建立銷毀api

2。執行緒間的通訊機制

3。執行緒的同步機制

其實建立消除執行緒,主要就是兩個api而已

至於執行緒間的通訊機制,雖然說很多,大致也不過兩種一種基於socket類的檔案套接字,另外一種則是基於記憶體的共享;執行緒記憶體天然就是共享的

執行緒同步機制。往往需要用到訊號量與鎖;

其實多執行緒中最難得往往是執行緒間的共享資源的訪問問題;大家都要操作同樣的一塊記憶體,可能存在同時操作的情況,所以與單執行緒操作中有更大的不同、

1.如果不是競爭很嚴重的資源,簡單的處理方式就是使用鎖來保證互斥的操作;

2.如果是競爭嚴重的資源,就想辦法設計無鎖的機制,例如單生產但消費者模型,無鎖的fifo

3.用原子變數來實現無鎖訪問一些變數

其實難度上來說

鎖《原子變數《無鎖機制

效能上來說恰好相反

其實總體上來說,如果不是核心功能模組,能不用多執行緒就盡量不要用,程式單執行緒簡單考慮的事兒少不容易出錯。如果非要用多執行緒,盡量用socket一類的通知機制來實現通訊,如果非要用共享記憶體,建議先好好學習一下鎖 :讀寫鎖,互斥鎖,以及spinlock。如果是多核程式設計必須了解一下記憶體屏障;

然後學習一下原子變數,然後掌握一下無鎖佇列和無鎖緩衝區

多執行緒的思考

1.為什麼要使用多執行緒?a.更好的利用cpu的資源.b.伺服器端我想不到其他原因.2.問題的由來?a.搶占式 b.共享記憶體 cpu對程序的排程是搶占式的 這裡先假設系統中所有的程序都是單執行緒模式的 沒有使用任何同步措施,沒問題,為什麼,因為沒有共享記憶體.lua等動態語言中多個執行流共享記憶體...

多執行緒程式設計

1 多執行緒的基本思路不是在介面執行緒執行費時的 而是專門啟動乙個執行緒 稱作工作執行緒 來完成,介面執行緒只負責介面的 顯示 和操作,而工作執行緒只負責耗時的操作過程。2 對於普通的win32應用程式來說,執行緒可以分為兩種 介面 ui user inte ce 執行緒和工作執行緒。介面執行緒一般...

多執行緒程式設計

如何編寫執行緒安全的dll 在我的工作中經常會編寫dll,這些dll有個共同的特點就是都有乙個初始化函式,乙個資源釋放函式,其他幾個函式都是核心功能函式。而且這些dll有時會被多個程序同時呼叫,這就牽扯到多程序的多執行緒呼叫dll的問題。有點繞口,以下我根據我實踐中遇到的問題,分四種情況分享一下我解...