面對複雜業務模型,並行程式比序列程式更適應業務需求,而併發程式設計更吻合這種業務拆分,正是因為這些優點,使得多執行緒技術能夠得到重視,也是一名cs學習者應該啊掌握的;
多執行緒技術有這麼多的好處,難道就沒有一點缺點,就在任何場景下就一定適用麼?很顯然不是
時間片是cpu分配給各個執行緒時間,因為時間非常短,所以cpu不斷通過切換執行緒,讓我們覺得多個執行緒是同時執行的,時間片一般是幾十毫秒.而每次切換時,都要儲存當前的狀態,以便能夠恢復先前狀態,而這個切換是非常損耗效能的,過於頻繁反而無法發揮多執行緒程式設計的優勢.通常減少上下文切換可以採用無鎖併發程式設計,cas演算法,使用最小的執行緒和使用協程.
多執行緒程式設計中最難把握的就是臨界區執行緒安全問題,稍微不注意就會出現死鎖的情況出現,一旦產生死鎖就會造成系統功能不可用.
publicclass
deadlockdemo
private
static
void
deadlock()
} catch
(interruptedexception e) }}
});thread threadb = new thread(new
runnable() }}
});threada.start();
threada.start();
}}
那麼,通常可以用如下方式避免死鎖的情況
避免乙個執行緒同時獲得多個鎖.
避免乙個執行緒在鎖內部占有多個資源,盡量保證每個鎖只占有乙個資源.
嘗試使用定時鎖,使用lock.trylock(timeout),當超時等待時,當前執行緒不會阻塞.
對於資料鎖,加鎖和解鎖必須在乙個資料庫連線裡,否則會出現解鎖失敗的情況.
所以,如何正確的使用多執行緒程式設計技術有很大的學問,比如如何保證執行緒安全,如何正確理解由於jmm記憶體模型在原子性,有序性,可見性帶來的問題,比如資料髒讀,dcl等這些問題(在後續篇幅會講述).在學習多執行緒程式設計技術的過程中會讓你收穫頗豐.所以要重視多執行緒程式設計.
python程式設計使用協程併發的優缺點
開發十年,就只剩下這套架構體系了!協程是一種使用者態的輕量級執行緒,又稱微執行緒。協程擁有自己的暫存器上下文和棧,排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧。因此 協程能保留上一次呼叫時的 狀態 即所有區域性狀態的乙個特定組合 每次過程重入時,就相當...
java併發集合的優缺點
執行緒池 executorservice exec executors.newfixedthreadpool 100 優點 1 任務分配簡單,任務少的情況下執行效率高 2 執行緒不需要控制,操作簡單 缺點 1 當每個任務執行時間很長的時候,占用的記憶體和cpu較多.2 執行緒不需要控制,操作簡單 時...
java併發集合的優缺點
執行緒池 executorservice exec executors.newfixedthreadpool 100 優點 1 任務分配簡單,任務少的情況下執行效率高 2 執行緒不需要控制,操作簡單 缺點 1 當每個任務執行時間很長的時候,占用的記憶體和cpu較多.2 執行緒不需要控制,操作簡單 推...