程序與執行緒

2022-02-25 08:31:54 字數 2018 閱讀 5470

1、在單核計算機裡,有乙個資源是無法被多個程式並行使用的:cpu。

沒有作業系統的情況下,乙個程式一直獨佔著全都cpu。

如果要有兩個任務來共享同乙個cpu,程式設計師就需要仔細地為程式安排好執行計畫--某時刻cpu和由程式a來獨享,下一時刻cpu由程式b來獨享

而這種安排計畫後來成為os的核心元件,被單獨名命為「scheduler」,即「排程器」,它關心的只是怎樣把單個cpu的執行拆分成一段一段的「執行片」,輪流分給不同的程式去使用,而在巨集觀上,因為分配切換的速度極快,就製造出多程式並行在乙個cpu上的假象。

2、在單核計算機裡,有乙個資源可以被多個程式共用,然而會引出麻煩:記憶體。

在乙個只有排程器,沒有記憶體管理元件的作業系統上,程式設計師需要手工為每個程式安排執行的空間 -- 程式a使用實體地址0x00-0xff,程式b使用實體地址0x100-0x1ff,等等。

然而這樣做有個很大的問題:每個程式都要協調商量好怎樣使用同乙個記憶體上的不同空間,軟體系統和硬體系統千差萬別,使這種定製的方案沒有可行性。

2.1、硬體上,cpu增加了乙個專門的模組叫mmu,負責轉換虛擬位址和實體地址。

2.2、作業系統上,作業系統增加了另乙個核心元件:memory management,即記憶體管理模組,它管理物理記憶體、虛擬記憶體相關的一系列事務。

2.3、應用程式上,發明了乙個叫做【程序】的模型,(注意)每個程序都用【完全一樣的】虛擬位址空間,然而經由作業系統和硬體mmu協作,對映到不同的實體地址空間上。不同的【程序】,都有各自獨立的物理記憶體空間,不用一些特殊手段,是無法訪問別的程序的物理記憶體的。

3、現在,不同的應用程式,可以不關心底層的物理記憶體分配,也不關心cpu的協調共享了。然而還有乙個問題存在:有一些程式,想要共享cpu,【並且還要共享同樣的物理記憶體】,這時候,乙個叫【執行緒】的模型就出現了,它們被包裹在程序裡面,在排程器的管理下共享cpu,擁有同樣的虛擬位址空間,同時也共享同乙個實體地址空間,然而,它們無法越過包裹自己的程序,去訪問別乙個程序的實體地址空間。

4、程序之間怎樣共享同乙個實體地址空間呢?不同的系統方法各異,符合posix規範的作業系統都提供了乙個介面,叫mmap,可以把乙個實體地址空間對映到不同的程序中,由不同的程序來共享。

5、ps:在有的作業系統裡,程序不是排程單位(即不能被排程器使用),執行緒是最基本的排程單位,排程器只排程執行緒,不排程程序,比如vxworks

關於php的程序

從邏輯角度來看,多執行緒的意義在於乙個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.

執行緒是程序的乙個實體,是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬乙個程序的其他的執行緒共享程序所擁有的全部資源.

乙個執行緒可以建立和撤銷另乙個執行緒;同乙個程序中的多個執行緒之間可以併發執行

乙個程式至少有乙個程序,乙個程序至少有乙個執行緒,程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序.

php其實是不支援多程序的.更沒有執行緒了,以後所說的都應該是多程序, 但是呢,php可以利用web伺服器,模擬出來多個程序..這就是為什麼linux下和windows下面 php實現多程序的方法,還不一樣. 乙個使用者 請求,伺服器就會開啟乙個程序.當然伺服器配置有程序數的,php 的fsocketopen  pcntl_fork  popen  exec等等.我想應該都是考伺服器開啟乙個程序的.從而實現多程序.程序是獨立的.所以說,每個客戶端請求php同乙個檔案,但是每個客戶端都是乙個不同的程序.之間不會有任何影響的.

程序與執行緒

程序 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 安全特性 因此程序是不活潑的,它從...