線程的三種基本狀態(tài) 工作者線程和用戶界面線程?
工作者線程和用戶界面線程?1)接口最好在一個(gè)線程中管理。2)最好由主線程來(lái)管理接口。3)在MFC中,如果主接口收到WM_QUIT,表示關(guān)閉窗口,那么主線程會(huì)退出/返回/返回。4)主線程退出,其他輔助線
工作者線程和用戶界面線程?
1)接口最好在一個(gè)線程中管理。
2)最好由主線程來(lái)管理接口。3)在MFC中,如果主接口收到WM_QUIT,表示關(guān)閉窗口,那么主線程會(huì)退出/返回/返回。4)主線程退出,其他輔助線程也會(huì)因?yàn)橹骶€程的退出而退出,不管執(zhí)行是否完成,都意味著進(jìn)程結(jié)束。樓主說(shuō)的不夠準(zhǔn)確。我的理解是,工作線程執(zhí)行計(jì)算時(shí),主線程的主界面不負(fù)責(zé)顯示工作進(jìn)度。只要有工作線程,主界面就應(yīng)該創(chuàng)建一個(gè)界面來(lái)顯示工作線程的工作進(jìn)度。如果工作線程結(jié)束,進(jìn)度顯示界面也應(yīng)該消失。如果是這樣的邏輯,可以布局如下:1)專門定義了一個(gè)進(jìn)度接口的窗口類。為了與工作線程通信,需要為這個(gè)進(jìn)度接口的窗口類定制各種自定義消息,并且要將這個(gè)類的窗口實(shí)例作為主接口的子窗口。這是在主界面關(guān)閉時(shí)完成的,作為子窗口,它也會(huì)被關(guān)閉。2)工作線程應(yīng)該由主接口創(chuàng)建,進(jìn)度接口也應(yīng)該由主接口創(chuàng)建。
3)工作線程匯報(bào)工作進(jìn)度,主界面不干涉。報(bào)告工作通過(guò)定制的消息在工作線程和進(jìn)度接口之間直接實(shí)現(xiàn)。
4)工作者線程需要返回之前,會(huì)向主接口發(fā)送一個(gè)關(guān)于完成的消息。
5)所有線程都有一個(gè) "完成信號(hào) "狀態(tài),即線程運(yùn)行時(shí)處于無(wú)信號(hào)狀態(tài),線程結(jié)束退出時(shí)處于信號(hào)狀態(tài)。如果不熟悉,可以看看 "系統(tǒng)編程與設(shè)計(jì)。使用此功能,主線程在收到工作線程即將完成的消息后調(diào)用WaitForSingleObject,并臨時(shí)阻塞自身。阻塞將導(dǎo)致主界面無(wú)法響應(yīng)用戶。;鼠標(biāo)和鍵盤消息,形成假死狀態(tài)。但是這種情況幾乎看不到。當(dāng)主線程收到工作線程的消息后調(diào)用WaitForSingleObject時(shí),會(huì)發(fā)生阻塞,但此時(shí)工作線程基本已經(jīng)退出,所以WaitForSingleObject幾乎不等待就返回,所以主接口被阻塞的估計(jì)值不到1秒。即使在最壞的情況下,多個(gè)工作線程同時(shí)完成,主接口也需要依次調(diào)用WaitForSingleObject,所以不會(huì)有問(wèn)題。6)WaitForSingleObject返回,標(biāo)記工作線程結(jié)束,主界面可以安全關(guān)閉進(jìn)度界面窗口。
什么是php進(jìn)程?
首先,PHP流程模型
進(jìn)程的概念是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。Multics的設(shè)計(jì)者在60年代首次使用這個(gè)專業(yè)術(shù)語(yǔ),比作業(yè)更籠統(tǒng)。流程的定義如下:
1.正在執(zhí)行的程序。
2.計(jì)算機(jī)中正在運(yùn)行的程序的例子。
3.它可以被分配給處理器并由處理器執(zhí)行。的實(shí)體。
4.由單個(gè)順序執(zhí)行線程、當(dāng)前狀態(tài)和一組相關(guān)系統(tǒng)資源描述的活動(dòng)單元。
二、進(jìn)程和線程的區(qū)別
進(jìn)程是資源分配的基本單位。與過(guò)程相關(guān)的所有資源都記錄在過(guò)程控制塊PCB中。以指示該進(jìn)程擁有或正在使用這些資源。
另外,進(jìn)程也是搶占式處理器的調(diào)度單元,它擁有完整的虛擬地址空間。在調(diào)度進(jìn)程時(shí),不同的進(jìn)程有不同的虛擬地址空間,而同一進(jìn)程中的不同線程共享相同的地址空間。
對(duì)應(yīng)一個(gè)進(jìn)程,線程與資源分配無(wú)關(guān)。它屬于一個(gè)進(jìn)程,并與該進(jìn)程中的其他線程共享該進(jìn)程的資源。
線程僅由相關(guān)的堆棧(系統(tǒng)堆?;蛴脩舳褩?寄存器和線程控制表TCB組成。寄存器可用于存儲(chǔ)線程內(nèi)的局部變量,但不能存儲(chǔ)其他線程的相關(guān)變量。
通常,一個(gè)進(jìn)程可以包含幾個(gè)線程,這些線程可以利用進(jìn)程所擁有的資源。在有線程的操作系統(tǒng)中,進(jìn)程通常被視為分配資源的基本單位,而線程則被視為獨(dú)立運(yùn)行和獨(dú)立調(diào)度的基本單位。由于線程比進(jìn)程小,基本沒(méi)有系統(tǒng)資源,其調(diào)度的成本會(huì)小很多,可以更高效地提高系統(tǒng)中多個(gè)程序并發(fā)執(zhí)行的程度,從而顯著提高系統(tǒng)資源的利用率和吞吐量。因此,近年來(lái),通用操作系統(tǒng)為了進(jìn)一步提高系統(tǒng)的并發(fā)性,紛紛引入線程,并將其作為現(xiàn)代操作系統(tǒng)的重要指標(biāo)。
線程和進(jìn)程之間的差異可以總結(jié)如下:
(1)進(jìn)程是資源分配和調(diào)度的獨(dú)立單位,而線程是CPU調(diào)度的基本單位。
(2)同一個(gè)進(jìn)程中可以包含多個(gè)線程,線程共享整個(gè)進(jìn)程的資源(寄存器、棧、上下文),每個(gè)進(jìn)程至少包含一個(gè)線程。
(3)進(jìn)程的創(chuàng)建調(diào)用fork或vfork,而線程的創(chuàng)建調(diào)用pthread_create。進(jìn)程結(jié)束后,它擁有的所有線程都將被銷毀,一個(gè)線程的結(jié)束不會(huì)影響同一進(jìn)程中其他線程的結(jié)束。
(4)線程是輕量級(jí)進(jìn)程,創(chuàng)建和銷毀線程所需的時(shí)間比進(jìn)程少得多。操作系統(tǒng)中所有的執(zhí)行功能都是通過(guò)創(chuàng)建線程來(lái)完成的。
(5)在線程中執(zhí)行時(shí),一般需要同步和互斥,因?yàn)樗鼈児蚕硗粋€(gè)進(jìn)程的所有資源。
(6)線程有自己的私有屬性TCB、線程id、寄存器和硬件上下文,而進(jìn)程也有自己的私有屬性進(jìn)程控制塊PCB,這些屬性是不共享的,用來(lái)標(biāo)記一個(gè)進(jìn)程或線程。
第三,進(jìn)程間的通信
1.管道和命名管道:管道可用于相關(guān)進(jìn)程之間的通信。名管克服了管沒(méi)有名字的限制。因此,除了管道的功能之外,它們還允許無(wú)關(guān)進(jìn)程之間的通信;
2.信號(hào):信號(hào)是一種復(fù)雜的通信,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。除了進(jìn)程間通信,進(jìn)程還可以向進(jìn)程本身發(fā)送信號(hào)。Linux不僅支持Unix早期的信號(hào)語(yǔ)義函數(shù)sigal,還支持語(yǔ)義符合Posix.1標(biāo)準(zhǔn)的信號(hào)函數(shù)sigaction(實(shí)際上這個(gè)函數(shù)是基于BSD的,BSD為了實(shí)現(xiàn)可靠的信號(hào)機(jī)制和統(tǒng)一對(duì)外接口,用sigaction函數(shù)重新實(shí)現(xiàn)了信號(hào)函數(shù))。
3.消息隊(duì)列(Message queue):消息隊(duì)列是消息的鏈表,包括Posix消息隊(duì)列system V message queue。擁有足夠權(quán)限的進(jìn)程可以將消息添加到隊(duì)列中,擁有讀取權(quán)限的進(jìn)程可以從隊(duì)列中讀取消息。消息隊(duì)列克服了信號(hào)攜帶信息量少、流水線只能攜帶無(wú)格式字節(jié)流和緩沖區(qū)大小有限的缺點(diǎn)。
4.共享內(nèi)存:它允許多個(gè)進(jìn)程訪問(wèn)同一個(gè)內(nèi)存空間,這是最快的IPC形式。它是針對(duì)其他通信機(jī)制的低效率而設(shè)計(jì)的。它通常與其他通信機(jī)制(如信號(hào)量)結(jié)合使用,以實(shí)現(xiàn)進(jìn)程間的同步和互斥。
信號(hào)量(Semaphore):主要用作進(jìn)程之間以及同一進(jìn)程的不同線程之間的同步手段。
Socket:一種更通用的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信。它最初是由Unix系統(tǒng)的BSD分支開(kāi)發(fā)的,但現(xiàn)在它一般可以移植到其他類似Unix的系統(tǒng):Linux和System V支持套接字的變體。