現代作業系統 mac os x,unix / unix,linux,microsoft windows 等都是支援多工的作業系統。
多工就是作業系統可以同時執行多個任務。例如你一邊在用瀏覽器上網,一邊在聽**,一邊在用 microsoft word 打字,這就是多工,至少同時有 3 個任務正在執行。還有很多任務悄悄地在後台同時執行著,只是桌面上沒有顯示而已。
多核 cpu 和單核 cpu 都執行多工。cpu 執行**都是順序執行的。
作業系統輪流讓各個任務交替執行,任務 1 執行 0.01 秒,切換到任務 2;任務 2 執行 0.01 秒,再切換到任務 3;任務 3 執行 0.01 秒…,這樣反覆執行下去。表面上看,每個任務都是交替執行的,由於 cpu 的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。
真正的並行執行多工只能在多核 cpu 上實現,由於任務數量遠遠多於 cpu 的核心數量,所以作業系統也會自動把很多任務輪流排程到每個核心上執行。
對於作業系統來說,乙個任務就是乙個程序 (process)。比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序,開啟乙個記事本就啟動了乙個記事本程序,開啟兩個記事本就啟動了兩個記事本程序,開啟乙個 microsoft word 就啟動了乙個 microsoft word 程序。
有些程序還不止同時幹一件事,比如 microsoft word,它可以同時進行打字、拼寫檢查、列印等事情。在乙個程序內部,要同時幹多件事,就需要同時執行多個子任務,程序內的這些子任務稱為執行緒 (thread)。
由於每個程序至少要幹一件事,所以乙個程序至少有乙個執行緒。像 microsoft word 這種複雜的程序可以有多個執行緒,多個執行緒可以同時執行,多執行緒的執行方式和多程序是一樣的,也是由作業系統在多個執行緒之間快速切換,讓每個執行緒都短暫地交替執行,看起來就像同時執行一樣。真正地同時執行多執行緒需要多核 cpu 才可能實現。
執行多個任務解決方案:
多工的實現有 3 種方式:
同時執行多個任務通常各個任務之間並不是沒有關聯的,而是需要相互通訊和協調。有時任務 1 必須暫停等待任務 2 完成後才能繼續執行,有時任務 3 和任務 4 又不能同時執行。多程序和多執行緒的程式的複雜度要遠遠高於我們前面寫的單程序單執行緒的程式。
複雜度高,除錯困難。
python 既支援多程序,又支援多執行緒。
執行緒是最小的執行單元,而程序由至少乙個執行緒組成。如何排程程序和執行緒,完全由作業系統決定,程式自己不能決定什麼時候執行,執行多長時間。
多程序和多執行緒的程式涉及到同步、資料共享的問題。
程序與執行緒
程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...
程序與執行緒
程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...
程序與執行緒
程序包括 1 私有的虛位址空間 2 可執行程式 與資料 3 開啟系統資源列表控制代碼 4 安全訪問標誌 5 程序id 6 至少有乙個執行執行緒 執行緒包括 1 一組cpu暫存器狀態 2 兩個堆疊 系統態與使用者態 3 tls 執行緒區域性儲存區 4 執行緒id 5 安全特性 因此程序是不活潑的,它從...