如果把主機比作乙個巨大的工廠的話,cpu、記憶體可以看做是工廠的資源,程序可以看做是乙個乙個的車間,這些車間也即程序是工廠進行資源分配的粒度。而執行緒可以看做是車間裡面的工人,乙個車間內部的工人共享自己車間內的所有資源,這些工人即執行緒的活動接受cpu的排程,也就是說執行緒是任務排程的粒度。
乙個車間即程序內的資源是有限的,例如廁所一次只能供乙個人使用,在有人進去使用的時候,需要在門外面上個鎖,即加鎖處理。也有的資源,可以最多供多個人使用,比如說廚房一次可以供10個人使用,這樣可以在們外面掛上10把鑰匙。這樣,當有人想去廚房的時候,首先看下門上面還有沒有鑰匙,有的話,可以直接取鑰匙開門進去。如果沒有的話,需要在外面等待裡面的人出來,放回鑰匙之後,再取鑰匙進去。這裡的鑰匙,即訊號量。
談到程序,就繼續談談程序之間的併發與並行。併發是說有同時執行多個程序的能力,但是這些程序不一定在同時執行。並行是說同乙個時刻有多個程序在執行。併發偏重於強調能力,而並行偏重與說程序的狀態。
例如,當你在吃飯的時候,如果這個時候來了個**,假設你必須吃完飯之後再去接**,飯沒有吃完的時候不能去接**,說明你不支援併發。如果你把碗放下,先去接**了,說明你支援併發。如果你邊吃飯,邊打**,說明你是並行執行。
程序中的多執行緒可以共享程序的公有資源來實現執行緒間的同步,那麼執行緒究竟共享了程序哪些資源呢?
1、堆堆是在程序中new出來的,所以被執行緒共享
2、全域性變數
全域性變數與某一函式無關,與執行緒也沒有關係,所以也是共享的
3、靜態變數
靜態變數存放於程序中的.bss段和.data段,也是共享的
4、檔案等公用資源,執行緒共享的時候必須同步
執行緒獨享的資源有:
1、執行緒中建立的堆
2、執行緒的優先順序
3、執行緒的棧
程序與執行緒
程序 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 安全特性 因此程序是不活潑的,它從...