個人以為是為了提高cpu利用率。執行緒給作業系統帶來的建立維護和管理負擔要輕。因為與執行緒相關的資訊比較少,交情的負擔意味著執行緒的代價或開銷比較少。當處理器除乙個程序並啟用另乙個程序時,就要發生上下文切換。為了發生上下文切換,作業系統必須啟動和重新啟動每個程序所需的資訊。這就意味著必須儲存描述程序存在狀態的有關資訊,在程序再次啟用時,就可以從離開的地點繼續執行。那麼系統在程序切換時需要儲存那些資訊呢?下面一一枚舉:
1、所需資訊包括可執行程式、堆疊、以及靜態與動態分配變數記憶體的指標。
2、暫存器組中包含執行下一條指令的指標這樣的資訊 。
3、重新任命程序時需要程序的狀態(程序是被掛起還是被阻塞)和優先權。同時程式的i/o狀態也被儲存。
4、儲存程序的規劃資訊,記憶體管理資訊以及計數資訊。
5、程序需要檔案描述器和讀寫指標來繼續使用資源。
而執行緒同樣需要上下文。當執行緒被搶先時同樣也會發生上下文切換。
與程序相比執行緒的優勢如下:
1、執行緒不需要位址空間。執行緒包含在程序的位址空間中。(所以在重新任命程序時所需的執行緒都不需要)
2、執行緒的上下文只包含乙個堆疊、乙個暫存器組和乙個優先權。
3、暫存器組包含程式或指令指標以及堆疊指標。
4、執行緒的文字包含在他的程序的文字中。
5、程序擁有的所有資源都屬於執行緒。所以與資源相關的所有資訊不是執行緒上下文的部分。
6、其他資訊如規劃、計數等都是由程序所定義。無需包含**程的上下文中。
執行緒與程序的相同之處是:都有id,暫存器組、狀態、以及優先權。執行緒與子程序共享父程序的資源。
他們的不同之處是:
1、執行緒沒有自己的位址空間,如果程序建立了多個所有的執行緒都將包含在他的位址空間中。
2、父程序和子程序之間必須通過程序間通訊機制來進行通訊。而程序中的多個執行緒之間是通過讀取和寫入資料到程序變數來通訊。
3、子程序對其他子程序不施加控制,而程序的執行緒被看做同位體(peer)並對程序的其他的執行緒施加控制。
談談多執行緒下為何需要鎖
什麼是鎖?為什麼存在?多個執行緒執行的時候,共享了同一塊資源,在訪問這塊資源的時候就稱為臨界資源。為了解決這個問題,我們可以為這塊資源加上一把鎖,只允許乙個執行緒訪問這塊資源。那今天就講講互斥鎖,自旋鎖。首先先看看不加鎖的情況下多執行緒共享訪問臨界資源會發生什麼.很簡單,開啟10個執行緒,各加上10...
為何需要核函式
生存?還是毀滅?哈姆雷特 可分?還是不可分?支援向量機 之前一直在討論的線性分類器,器如其名 汗,這是什麼說法啊 只能對線性可分的樣本做處理。如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程式會無限迴圈,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦...
為何需要呼叫「super viewDidLoad」
super didreceivememorywarning void viewdidload 在上面的 中,什麼需要呼叫父類相應的方法呢?以viewdidload為例,父類 super 中的 viewdidload 會幫助你做一些初始化的工作,比如 a是父類,b繼承a,b 在viewdidload ...