Win32 多線程
進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式。進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
摘要: 進(jìn)程和線程都是操作系統(tǒng)的概念。進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,每個(gè)進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進(jìn)程在運(yùn)行過(guò)程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷毀,所使用的系統(tǒng)資源在進(jìn)程終止時(shí)被釋放或關(guān)閉。
線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行單元。系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動(dòng)執(zhí)行了該進(jìn)程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說(shuō)main或WinMain函數(shù),將程序的啟動(dòng)點(diǎn)提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進(jìn)程也就隨之終止。
每一個(gè)進(jìn)程至少有一個(gè)主執(zhí)行線程,它無(wú)需由用戶去主動(dòng)創(chuàng)建,是由系統(tǒng)自動(dòng)創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個(gè)線程并發(fā)地運(yùn)行于同一個(gè)進(jìn)程中。一個(gè)進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。
閱讀全文
摘要: Windows是一個(gè)多任務(wù)操作系統(tǒng)。傳統(tǒng)的Windows 3.x只能依靠應(yīng)用程序之間的協(xié)同來(lái)實(shí)現(xiàn)協(xié)同式多任務(wù),而Windows 95/NT實(shí)行的是搶先式多任務(wù)。
在Win 32(95/NT)中,每一個(gè)進(jìn)程可以同時(shí)執(zhí)行多個(gè)線程,這意味著一個(gè)程序可以同時(shí)完成多個(gè)任務(wù)。對(duì)于象通信程序這樣既要進(jìn)行耗時(shí)的工作,又要保持對(duì)用戶輸入響應(yīng)的應(yīng)用來(lái)說(shuō),使用多線程是最佳選擇。當(dāng)進(jìn)程使用多個(gè)線程時(shí),需要采取適當(dāng)?shù)拇胧﹣?lái)保持線程間的同步。
利用Win 32的重疊I/O操作和多線程特性,程序員可以編寫出高效的通信程序。在這一講的最后將通過(guò)一個(gè)簡(jiǎn)單的串行通信程序,向讀者演示多線程和重疊I/O的編程技術(shù)。
閱讀全文
摘要: Overlapped I/O也稱Asynchronous I/O,異步I/O模型。異步I/O和同步I/O不同,同步I/O時(shí),程序被掛起,一直到I/O處理完,程序才能獲得控制。異步I/O,調(diào)用一個(gè)函數(shù)告訴 OS,進(jìn)行I/O操作,不等I/O結(jié)束就立即返回,繼續(xù)程序執(zhí)行,操作系統(tǒng)完成I/O之后,通知消息給你。Overlapped I/O只是一種模型,它可以由內(nèi)核對(duì)象(hand),事件內(nèi)核對(duì)象(hEvent), 異步過(guò)程調(diào)用(apcs) 和完成端口(I/O completion)實(shí)現(xiàn)。
閱讀全文
摘要: OVERLAPPED,顧名思義為重疊,乍一看會(huì)很奇怪,重疊?誰(shuí)跟誰(shuí)重疊?似乎在WIN32的Programming中沒(méi)有這個(gè)概念呀?要討論這個(gè)問(wèn)題就要追溯到對(duì)設(shè)備I/O的訪問(wèn)中
閱讀全文