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