使用併發程式設計的目的是加快程式的執行速度,但同樣的使用併發程式設計會帶來新的問題。上下文切換問題、死鎖問題
上下文切換
問:上下文切換是什麼,導致產生上下文切換問題的原因是什麼呢?
答:對於單核處理器的計算機而言,cpu是通過為多執行緒分配cpu時間片來實現多執行緒的,多個執行緒共同搶占cpu分配的有限時間片,時間片搶占執行完後,返回就緒狀態,或者程式執行完畢。但是在當前任務搶占完並執行完乙個時間片後,切換前會保留上乙個任務的狀態,方便下一次切換回載入這個任務。所以,任務從儲存到載入的過程就是一次上下文的切換。
可想而知,這個保留當前任務,並再次載入任務的過程就會造成不必要的時間浪費。所以,無限制的增加執行緒並不能一直增加程式的執行效率。
如何減少上下文的切換?
死鎖併發程式設計過程中,由於多個執行緒間,共同搶占對方需要而又沒有及時釋放掉的資源,很容易導致死鎖的情況發生。
面試的時候偶爾也會遇到,讓手寫乙個死鎖的情況。
public
class
deadlockdemo
catch
(interruptedexception e)
sychronized
(b)}}}
);thread t2 =
newthread
(new
runnable()
)}}}
);t1.
start()
; t2.
start()
;}}
如何避免死鎖呢? 併發程式設計 1
目錄 程序 程序即正在執行的乙個過程。程序是對正在執行程式的乙個抽象。將應用程式對硬體資源的靜態請求變得有序化 併發 看起來是同時執行的 並行 真正做到了同時執行 多道技術 了解 空間復用 共用乙個記憶體條,每乙個程序都有自己獨立的記憶體空間,互不干擾,物理級別的隔離 時間復用 共用乙個cpu cp...
併發程式設計1
1 程序與程式 程序 正在執行的乙個過程。程序是對正在執行程式的乙個抽象 程式 是由程式設計師將自己的思維邏輯按照某種程式語言規範編寫下來的一堆字串,最終形成的一堆檔案 程序是由程式產生的,沒有程式就沒有程序 2 作業系統與程序 應用程式無法直接執行在硬體之上,一定要借助作業系統 所以程序是由作業系...
JAVA併發1 併發程式設計的挑戰
乙個cpu同一時刻只能執行乙個執行緒 cpu 通過給每個執行緒分配一定的時間片,時間片非常短,通常是幾十毫秒,來不停的切換執行緒執行任務,達到了多執行緒的效果。當執行緒用完自己的時間片後,及時任務還沒有完成,作業系統也會剝奪它的執行權,讓另一條執行緒執行。當一條執行緒的時間片用完後,作業系統會暫停該...