Javasp

Thursday, May 27, 2004

在.NET客戶端程序中使用多線程

資料來源: yesky

日期: 2004年5月26日


  通常認為在編寫程序中用到多線程是一個高級的編程任務,容易發生錯誤。在本月的欄目中,我將在一個Windows窗體應用程序中使用多線程,它具有實際的意義,同時盡量使事情簡單。我的目標是在一個普通的需求描述中用最好的辦法講解多線程;客戶仍然比較喜歡使用戶交互方式的應用程序。

  多線程通常和服務器端軟件,可擴展性及性能技術聯繫在一起。 然而,在微軟.NET框架中,許多服務器端應用程序都駐留在ASP.NET體系結構中。同樣,這些應用程序在邏輯上是單線程的, 因為IIS和ASP.NET在ASP.NET Web Form或Web服務程序中執行了許多或所有的多線程。 在ASP.NET應用程序中你一般可以忽略線程性。 這就是為什麼在.NET框架中,多線程更傾向於在客戶端使用的一個原因,比如在保證同用戶交互的同時而執行一個很長的操作。

  線程背景

  線程執行代碼。它們由操作系統實現,是CPU本身的一種抽像。許多系統都只有一個CPU, 線程是把CPU快速的處理能力分開而執行多個操作的一種方法,使它們看起來好像同步似的。即使一個系統由多個CPU, 但運行的線程一般要比處理器多。

  在一個Windows為基礎的應用程序中,每一個進程至少要有一個線程,它能夠執行機器語言指令。 一旦一個進程的所有線程都中止了,進程本身和它所佔用的資源將會被Windows清除。

  許多應用程序都被設計為單線程程序,這意味著該程序實現的進程從來不會有超過一個線程在執行,即使在系統中有多個同樣的處理在進行。一般一個進程不會關心繫統中其他進程的線程的執行。

  然而,在單個進程裡的所有線程不僅共享虛擬地址空間,而且許多進程級的資源也被共享, 比如文件和窗口句柄等。由於進程資源共享的特徵,一個線程必須考慮同一進程中其它線程正在做什麼。線程同步是在多線程的進程中保持各線程互不衝突的一門藝術。這也使得多線程比較困難。

  最好的方式是只有在需要時才使用多線程,盡量保持事情簡單。而且要避免線程同步的情況。在本欄目中,我將向你展示如何為一個普通的客戶應用程序做這些事情。

0 Comments:

Post a Comment

<< Home