首頁>Club>
11
回覆列表
  • 1 # 使用者352755821118

    一、PHP程序模型


    程序的概念是作業系統的結構的基礎。Multics的設計者在20世紀60年代首次使用了這個技術詞語,它比作業更通用一些。關於程序的定義,如下所示:


    1、一個正在執行的程式。


    2、計算機中正在執行的程式的一個例項。


    3、可以分配給處理器並由處理器執行的一個實體。


    4、由單一的順序的執行執行緒、一個當前狀態和一組相關的系統資源所描述的活動單元。


    二、程序與執行緒區別


    程序是資源分配的基本單位。所有與該程序有關的資源,都被記錄在程序控制塊PCB中。以表示該程序擁有這些資源或正在使用它們。


    另外,程序也是搶佔處理機的排程單位,它擁有一個完整的虛擬地址空間。當程序發生排程時,不同的程序擁有不同的虛擬地址空間,而同一程序內的不同執行緒共享同一地址空間。


    與程序相對應,執行緒與資源分配無關,它屬於某一個程序,並與程序內的其他執行緒一起共享程序的資源。


    執行緒只由相關堆疊(系統棧或使用者棧)暫存器和執行緒控制表TCB組成。暫存器可被用來儲存執行緒內的區域性變數,但不能儲存其他執行緒的相關變數。


    通常在一個程序中可以包含若干個執行緒,它們可以利用程序所擁有的資源。在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位。由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統內多個程式間併發執行的程度,從而顯著提高系統資源的利用率和吞吐量。因而近年來推出的通用作業系統都引入了執行緒,以便進一步提高系統的併發性,並把它視為現代作業系統的一個重要指標。


    執行緒與程序的區別可以歸納為以下4點:


    (1)程序是資源的分配和排程的一個獨立單元,而執行緒是CPU排程的基本單元


    (2)同一個程序中可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),一個進行至少包括一個執行緒。


    (3)程序的建立呼叫fork或者vfork,而執行緒的建立呼叫pthread_create,程序結束後它擁有的所有執行緒都將銷燬,而執行緒的結束不會影響同個程序中的其他執行緒的結束


    (4)執行緒是輕量級的程序,它的建立和銷燬所需要的時間比程序小很多,所有作業系統中的執行功能都是建立執行緒去完成的


    (5)執行緒中執行時一般都要進行同步和互斥,因為他們共享同一程序的所有資源


    (6)執行緒有自己的私有屬性TCB,執行緒id,暫存器、硬體上下文,而程序也有自己的私有屬性程序控制塊PCB,這些私有屬性是不被共享的,用來標示一個程序或一個執行緒的標誌


    三、程序間通訊方式


    1、管道(Pipe)及有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊;


    2、訊號(Signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援Unix早期訊號語義函式sigal外,還支援語義符合Posix.1標準的訊號函式sigaction(實際上,該函式是基於BSD的,BSD為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式);


    3、報文(Message)佇列(訊息佇列):訊息佇列是訊息的連結表,包括Posix訊息佇列system V訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。


    4、共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用IPC形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。


    訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。


    5、套介面(Socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支援套接字。

  • 中秋節和大豐收的關聯?
  • 注塑產品有流痕怎麼調?