線程處理
發(fā)表時間:2023-08-12 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]Visual Studio.NET允許用戶開發(fā)多條互不相干的多線程的應(yīng)用程序。也就是說,當(dāng)用戶在執(zhí)行一個程序的時候,也可以在另外一條的線程獨立地運行另外一個任務(wù)程序,這種過程被稱為自由線程(Free...
Visual Studio.NET允許用戶開發(fā)多條互不相干的多線程的應(yīng)用程序。也就是說,當(dāng)用戶在執(zhí)行一個程序的時候,也可以在另外一條的線程獨立地運行另外一個任務(wù)程序,這種過程被稱為自由線程(Free Threading),對于用戶而言,自由線程概念的引入,使得應(yīng)用程序?qū)τ脩舻捻憫?yīng)將更加積極,因為任務(wù)處理器能夠在某一個線程正在運行時,依然保持界面對用戶的響應(yīng),只要對用戶響應(yīng)的線程正在運行。而且,自由線程在運行大型的程序的時候,也將回很有用,因為隨著運行任務(wù)的增加,用戶可以多開辟幾個線程來運行程序。
1.1.1何時使用線程
需要用戶交互的軟件必須盡可能快地對用戶的活動作出反應(yīng),以便提供豐富多彩的用戶體驗。但同時它必須執(zhí)行必要的計算以便盡可能快地將數(shù)據(jù)呈現(xiàn)給用戶。如果應(yīng)用程序僅使用一個執(zhí)行線程,則可以結(jié)合使用異步編程與 .NET 遠(yuǎn)程處理或使用 ASP.NET 創(chuàng)建的 XML Web services,以便在使用自己計算機的處理時間以外再使用其他計算機的處理時間,從而提高對用戶的響應(yīng)速度并減少應(yīng)用程序的數(shù)據(jù)處理時間。如果您正在進(jìn)行大量的輸入/輸出工作,則還可以使用 I/O 完成端口來提高應(yīng)用程序的響應(yīng)速度。
1.1.2 多個線程的優(yōu)點
無論如何,要提高對用戶的響應(yīng)速度并且處理所需數(shù)據(jù)以便幾乎同時完成工作,使用多個線程是一種最為強大的技術(shù)。在具有一個處理器的計算機上,多個線程可以通過利用用戶事件之間很小的時間段在后臺處理數(shù)據(jù)來達(dá)到這種效果。例如,在另一個線程正在重新計算同一應(yīng)用程序中的電子表格的其他部分時,用戶可以編輯該電子表格。
無需修改,同一個應(yīng)用程序在具有多個處理器的計算機上運行時將極大地滿足用戶的需要。單個應(yīng)用程序域可以使用多個線程來完成以下任務(wù):
l 通過網(wǎng)絡(luò)與 Web 服務(wù)器和數(shù)據(jù)庫進(jìn)行通訊。
l 執(zhí)行占用大量時間的操作。
l 區(qū)分具有不同優(yōu)先級的任務(wù)。例如,高優(yōu)先級線程管理時間關(guān)鍵的任務(wù),低優(yōu)先級線程執(zhí)行其他任務(wù)。
l 使用戶界面可以在將時間分配給后臺任務(wù)時仍能快速作出響應(yīng)。
1.1.3 多個線程的缺點
建議您使用盡可能少的線程,這樣可以使操作系統(tǒng)資源的使用率最低,并可提高性能。線程處理還具有在設(shè)計應(yīng)用程序時要考慮的資源要求和潛在沖突。這些資源要求如下所述:
l 系統(tǒng)將為進(jìn)程、AppDomain 對象和線程所需的上下文信息使用內(nèi)存。因此,可以創(chuàng)建的進(jìn)程、AppDomain 對象和線程的數(shù)目會受到可用內(nèi)存的限制。
l 跟蹤大量的線程將占用大量的處理器時間。如果線程過多,則其中大多數(shù)線程都不會產(chǎn)生明顯的進(jìn)度。如果大多數(shù)當(dāng)前線程處于一個進(jìn)程中,則其他進(jìn)程中的線程的調(diào)度頻率就會很低。
l 使用許多線程控制代碼執(zhí)行非常復(fù)雜,并可能產(chǎn)生許多錯誤。
l 銷毀線程需要了解可能發(fā)生的問題并對那些問題進(jìn)行處理。
提供對資源的共享訪問會造成沖突。為了避免沖突,必須對共享資源的訪問進(jìn)行同步或控制。未能正確地使訪問同步(在相同或不同的應(yīng)用程序域中)會導(dǎo)致諸如死鎖(兩個線程都停止響應(yīng),并且都在等待對方完成)和爭用條件(由于意外地出現(xiàn)對兩個事件的執(zhí)行時間的臨界依賴性而發(fā)生反常的結(jié)果)等問題。系統(tǒng)提供了可用于協(xié)調(diào)多個線程之間的資源共享的同步對象。減少線程的數(shù)目使同步資源更為容易。
需要同步的資源包括:
l 系統(tǒng)資源(如通訊端口)。
l 多個進(jìn)程所共享的資源(如文件句柄)。
l 由多個線程訪問的單個應(yīng)用程序域的資源(如全局、靜態(tài)和實例字段)。