欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
進(jìn)程與線(xiàn)程

什么是進(jìn)程?什么是線(xiàn)程?它們之間到底是什么關(guān)系?這是論壇上常被初學(xué)者問(wèn)起的幾個(gè)高頻問(wèn)題之一,多數程序員開(kāi)始在Windows平臺上編程時(shí)也會(huì )迷惑與這個(gè)問(wèn)題。本文簡(jiǎn)單介紹了進(jìn)程和線(xiàn)程的關(guān)系,同時(shí)對編程中常見(jiàn)的一些問(wèn)題進(jìn)行了解釋。

操作系統對進(jìn)程的定義是特定的代碼序列在指定數據集合上的一次執行活動(dòng),可見(jiàn)這是一個(gè)動(dòng)態(tài)概念,所以一些資料說(shuō)進(jìn)程就是可執行文件是不正確的。操作系統對進(jìn)程的定義有些晦澀,通俗點(diǎn)講,進(jìn)程就是正在計算機上運行的可執行文件針對特定的輸入數據的一個(gè)實(shí)例,同一個(gè)可執行程序文件如果操作不同的輸入數據就是兩個(gè)不同的進(jìn)程,理解這一點(diǎn)是很重要的,當你看到系統中有多個(gè)相同名字的進(jìn)程同時(shí)存在時(shí)就不會(huì )再感到困惑。象Windows這樣的多任務(wù)分時(shí)操作系統對進(jìn)程的調度是針對線(xiàn)程進(jìn)行的,也就是說(shuō)線(xiàn)程是進(jìn)程調度的基本單位(當然,支持超線(xiàn)程的CPU問(wèn)世后這個(gè)概念需要重新定義)。
那么進(jìn)程和線(xiàn)程到底是什么關(guān)系呢?其實(shí)很簡(jiǎn)單,可以把進(jìn)程理解為一個(gè)線(xiàn)程容器,線(xiàn)程不能獨立存在,它必須隸屬于某個(gè)進(jìn)程,而進(jìn)程也至少擁有一個(gè)線(xiàn)程,如果一個(gè)進(jìn)程的所有線(xiàn)程都結束了那么進(jìn)程也就結束了。在Windows平臺上編程創(chuàng )建進(jìn)程用CreateProcess,創(chuàng )建線(xiàn)程用CreateThread,不僅線(xiàn)程與進(jìn)程之間存在父子繼承關(guān)系,進(jìn)程之間也存在繼承關(guān)系,通過(guò)進(jìn)程之間的繼承關(guān)系,子進(jìn)程可以共享父進(jìn)程的對象句柄,并可以通過(guò)這些句柄完成進(jìn)程間通信。


問(wèn)題:使用多進(jìn)程還是多線(xiàn)程的設計方式?

完成一個(gè)任務(wù)可以有多進(jìn)程和多線(xiàn)程兩種方式,到底哪種方式快呢?通常人們認為Windows系統是以進(jìn)程為單位分配CPU時(shí)間片的,那么使用多個(gè)進(jìn)程就可以多分得一些CPU時(shí)間,自然就會(huì )比使用單獨進(jìn)程多個(gè)線(xiàn)程的方式快一點(diǎn)了。事實(shí)上這種情況并不絕對正確,首先,創(chuàng )建進(jìn)程比創(chuàng )建線(xiàn)程要多占用系統資源,系統資源不足往往會(huì )引起系統性能的下降,導致任務(wù)完成的比較慢。其次,由于多個(gè)進(jìn)程要操作同一個(gè)數據集合,必然會(huì )因為數據爭用導致進(jìn)程狀態(tài)改變,同多個(gè)線(xiàn)程狀態(tài)改變相比,進(jìn)程切換要使用更多的CPU時(shí)間。最后,使用單進(jìn)程方式,由于進(jìn)程少,每個(gè)進(jìn)程又可以較多的獲得CPU時(shí)間片,從而能夠很大的改善進(jìn)程的性能。由此可見(jiàn),并不是使用多進(jìn)程處理數據就一定比使用多個(gè)線(xiàn)程的單進(jìn)程快。圖(1)顯示了使用兩種方式的程序性能變化曲線(xiàn),從圖上可以看出,無(wú)論使用何種方式,進(jìn)程和線(xiàn)程都不是越多越好,兩種方式都存在一個(gè)臨界點(diǎn),超過(guò)這個(gè)臨界點(diǎn),都會(huì )因為頻繁的進(jìn)程或線(xiàn)程狀態(tài)切換而造成程序性能下降。使用多進(jìn)程方式在到達臨界點(diǎn)之后再增加進(jìn)程就會(huì )引起性能的下降,而且下降速度比單進(jìn)程多線(xiàn)程方式到達臨界點(diǎn)之后的下降速度快,這是因為進(jìn)程切換比線(xiàn)程切換更費時(shí)。

進(jìn)程與線(xiàn)程性能.gif


從圖(1)中還可以看出,使用單進(jìn)程多線(xiàn)程方式,合理的選擇線(xiàn)程數量往往可以得到比多進(jìn)程方式更好的性能。


問(wèn)題:CreateThread,_beginthread,_beginthreadex的區別

首先要澄清一個(gè)問(wèn)題,那就是CreateThread是Windows的API函數,而_beginthread和_beginthreadex則是CRT庫函數,查看這兩個(gè)CRT函數的代碼可以得知其實(shí)它們內部是調用的CreateThread(這很顯然嘛,CRT庫也是要運行在Windows上)。這兩個(gè)CRT函數與CreateThread有什么區別呢?區別在于這兩個(gè)CRT函數針對其它CRT庫函數,特別是那些涉及內存分配的CRT函數做了特殊的處理。直接在CreateThread API創(chuàng )建的線(xiàn)程中使用sprintf,malloc,strcat等涉及CRT存儲堆操作的CRT庫函數是很危險的,容易造成線(xiàn)程的意外中止。 在使用_beginthread和_beginthreadex創(chuàng )建的線(xiàn)程中可以安全的使用CRT函數,但是必須在線(xiàn)程結束的時(shí)候相應的調用_endthread和_endthreadex。雖然都是內部調用CreateThread API創(chuàng )建線(xiàn)程,但是這兩個(gè)函數還是有很大的區別。首先,_beginthreadex函數比_beginthread函數多了三個(gè)參數,使它看起來(lái)更像CreateThread而不是同胞兄弟_beginthread;其次,_beginthread要求線(xiàn)程函數是__cdecl調用約定,并且沒(méi)有返回值,而_beginthreadex則要求線(xiàn)程函數是__stdcall調用約定并且返回線(xiàn)程的退出碼;第三,與_beginthread成對調用的_endthread函數內部隱式的調用CloseHandle關(guān)閉了線(xiàn)程句柄,而與_beginthreadex成對使用的_endthreadex則沒(méi)有關(guān)閉線(xiàn)程的句柄,需要顯示的調用CloseHandle關(guān)閉線(xiàn)程句柄;最后,這兩個(gè)函數在執行成功時(shí)返回線(xiàn)程的句柄,可以通過(guò)這個(gè)句柄調用其它線(xiàn)程相關(guān)的API,比如SetThreadPriority,ResumeThread等等。但是執行失敗時(shí)返回值是不同的,_beginthread返回 -1 表示失敗,而_beginthreadex返回 0 表示失敗。


問(wèn)題:ExitThread和TerminateThread的區別

ExitThread通常用在線(xiàn)程函數的最后,通知操作系統線(xiàn)程結束了,并通過(guò)函數參數將線(xiàn)程結束代碼提交給系統,而TerminateThread則是強行中止一個(gè)運行中的線(xiàn)程,它更多的時(shí)候是在線(xiàn)程外被調用。TerminateThread是一個(gè)很“粗魯”的函數,它并不負責處理線(xiàn)程結束的“后事”,比如堆棧的還原和資源的釋放等等,很容易造成異常。通常,線(xiàn)程函數執行完線(xiàn)程就結束了,只有在極端的情況下才使用TerminateThread中止一個(gè)線(xiàn)程。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Windows核心編程(第五版)筆記 第六章 線(xiàn)程基本概念(Thread Basics)
Windows線(xiàn)程創(chuàng )建、退出及資源釋放
(轉) C,C 多線(xiàn)程編程
《windows核心編程系列》五談?wù)劸€(xiàn)程基礎
采用_beginthread/_beginthreadex函數創(chuàng )建多線(xiàn)程
_beginthread還是CreateThread
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久