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