多執行緒的思考

2022-05-02 17:30:06 字數 1239 閱讀 4455

1. 為什麼要使用多執行緒?

a. 更好的利用cpu的資源.

b. 伺服器端我想不到其他原因.

2. 問題的由來?

a. 搶占式

b. 共享記憶體

cpu對程序的排程是搶占式的 [這裡先假設系統中所有的程序都是單執行緒模式的], 沒有使用任何同步措施, 沒問題, 為什麼, 因為沒有共享記憶體. lua等動態語言中多個執行流共享記憶體, 但是沒有使用任何同步措施, 也沒問題, 因為不是搶占式排程.

多執行緒的問題在於這兩者的共存, 乙個執行緒在某一隨機點停下來時的機器狀態快照和在後來某時刻在這一點恢復時的機器狀態快照可能天差地別, 但是程式依然依賴於停止前的那張狀態快照繼續執行, 這樣就造成了錯誤.

3. 對於多執行緒程式設計的基本看法?

我個人在這個問題上的看法是: 使用多程序代替或者在極度清晰的情況下限制性的使用執行緒. 前者是選擇搶占式而放棄共享記憶體, 後者不是一種具體的方法, 而是為了表達一種想正確設計多執行緒程式很難的意思, 除非你知道自己想幹什麼, 不然還是回到第一種方案.

放棄企圖提供一種計算框架的想法, 合理使用多執行緒是乙個設計問題, 而不是乙個程式技術問題, 它的困難程式取決於企**決的問題的特性和複雜度, 往往這些問題是一些本質性的複雜, 並不存在完美的或者是一致的解決方法, 就像沒有乙個"萬能軟體"一樣.

個人認為將多執行緒問題的徹底解決方案留給乙個尚未出名或者是尚未出生的天才. 這樣想並不丟人, 因為咱們的世界, 不是本來就是有了瓦特, 愛迪生, 牛頓這樣的人, 才能大踏步的前進麼?

4. 在你認同我的第3條看法後, 我覺得有一些觀點可以分享一下

1. cpu多核了, 計算資源增多了. 但是一定要在乙個程式中來盡量發揮計算資源呢? 為什麼不是職責分明, 通過多個程式的合作來達到同樣的目地呢? 通過程式合作的系統帶給程式設計上的禮物是, 它將比任何乙個設計模式更好的讓你的系統解耦, 這是最好的辦法了.

2. 程序間通訊沒有想象的那麼慢, 除非在實際中你碰到了因為程序間通訊效率引起的大問題, 那麼首先應該懷疑自己的模組劃分問題? 是不是將同乙個模組劃到了兩個程序中造成這樣的大量訊息互動; 第二, 你真的確定遇到的問題是因為程序間通訊效率引起的麼? 至少我到現在還沒聽說過呢.

3. socket通訊方式是最好的程序間通訊, 選擇它的附帶獎勵是你的系統天然支援分布式, 如果你用socket通訊方式組織你的一系列合作的程式, 你就可以自豪的告訴別人:"我這是雲系統", 雲是啥, 老外說的好, 雲就是讓分布式聽起來更**點.

多執行緒程式設計的思考

bestboyxie 勵志做一名能幫助到他人的程式設計師,如果你覺得這篇文章對你有幫助,麻煩你點讚 其實學習多執行緒程式設計已經是很多年前的事情了真正用到多執行緒的應用場景並不多,總體上說來我覺得多執行緒有一下幾個方面的思考 1。為什麼要用多執行緒。其實很多時候,學習多執行緒程式設計的時候,總是寫了...

多執行緒快速排序(思考)

在csdn看到的一位牛人實現的多執行緒快排,暫時沒細看,但是感覺有點小問題,他的多執行緒快排並沒有實現我所想要的那種平行計算的結果,我理想中的多執行緒排序 這裡特指快排 應該是類似於mapreduce的分拆和合併,在快排中,分拆是必然 和歸併一樣,基因決定嘛 分拆後的陣列可以形成佇列,按照核心數分給...

多執行緒中的movetoThread思考(qt)

1.正確用法 無需子類化執行緒類,通過訊號啟動定時器。testclass testclass qwidget parent qwidget parent 通過movetothread 方法改變定時器所處的執行緒,不要給定時器設定父類,否則該函式將不會生效。在訊號槽連線時,我們增加了乙個引數 連線型別...