先介紹下程序、執行緒、多執行緒,再總結下多執行緒的優缺點:
程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,也就是應用程式的執行例項,程序是系統進行資源分配和排程的乙個獨立單位。每個程序是由私有的虛擬位址空間、**、資料和其它各種系統資源組成,程序在執行過程中建立的資源隨著程序的終止而被銷毀,所使用的系統資源在程序終止時被釋放或關閉。
執行緒是程式中的乙個執行流,乙個程序中可以包含多個執行緒,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但**區是共享的,即不同的執行緒可以執行同樣的函式。
多執行緒是指程式中包含多個執行流,即在乙個程式(程序)中可以同時執行多個不同的執行緒來執行不同的任務,也就是說允許單個程式(程序)建立多個並行執行的執行緒來完成各自的任務。在單核處理器的電腦中,執行緒協調程式在完成乙個時間片之後迅速地在活動的執行緒之間進行切換執行。比如乙個程式執行期間,你可以進行多個操作,其實就是執行緒間在飛快的切換,這叫做併發。在多核電腦中,多執行緒被實現成混合時間片和真實的並行,即不同的執行緒在不同的cpu上執行。
多執行緒程式一般被用來在後台執行耗時的任務。主線程保持執行,並且工作執行緒做它的後台工作。對於windows forms程式來說,如果主線程試圖執行冗長的操作,鍵盤和滑鼠的操作會變的遲鈍,程式也會失去響應。由於這個原因,應該在工作執行緒中執行乙個耗時任務時新增乙個工作執行緒,即使在主線程上有乙個有好的提示「處理中...」,以防止工作無法繼續。這就避免了程式出現由作業系統提示的「沒有相應」,來誘使使用者強制結束程式的程序而導致錯誤。模式對話方塊還允許實現「取消」功能,允許繼續接收事件,而實際的任務已被工作執行緒完成。backgroundworker恰好可以輔助完成這一功能。
在沒有使用者介面的程式裡,比如說windows service, 多執行緒在當乙個任務有潛在的耗時,因為它在等待另台電腦的響應(比如乙個應用伺服器,資料庫伺服器,或者乙個客戶端)的實現特別有意義。用工作執行緒完成任務意味著主線程可以立即做其它的事情。
同樣的 ,多執行緒也存在許多缺點 ,在考慮多執行緒時需要進行充分的考慮。多執行緒的主要缺點包括:
程序 執行緒 多程序 多執行緒的優缺點
ibm有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖 windows2k的 critical section和linux的pthread mutex windows比linux的要快五倍左右。當然這並不是說linux不好,而且在經過實際程式設...
Linux 多程序與多執行緒的理解及優缺點
首先我們的問題是,執行緒是什麼?執行緒是程序中的一條執行流,是cpu執行排程的基本單位,乙個程序中可以有多個執行緒。在linux下,執行緒執行流是通過pcb實現的,且乙個程序中可能有多個pcb,這些pcb共享同乙個程序中大部分資源,也可以將其稱作輕量級程序。linux下程序是系統進行資源分配的基本單...
PHP 多程序和多執行緒的優缺點
使用多程序,子程序結束以後,核心會負責 資源 使用多程序,子程序異常退出不會導致整個程序thread退出.父程序還有機會重建流程.乙個常駐主程序,只負責任務分發,邏輯更清楚.多程序方式更加穩定,另外利用程序間通訊 ipc 也可以實現資料共享。共享記憶體,這種方式和執行緒間讀寫變數是一樣的,需要加鎖,...