2014-01-05 40 views
0

我知道有兩個由CLR維護的線程池,即工作線程和I/O線程。然而,閱讀以下文章後,我有點困惑:http://nirajrules.wordpress.com/2009/09/28/net-worker-threads-io-threads-and-asynchronous-programming/工作線程表示線程類的一個實例

我與一位從未聽說過「工作者主題」一詞的更高級開發者交談過。我理解工作線程是主線程的同義詞,例如當用戶請求ASP.NET網頁時,將創建一個工作線程。因此,如果20個用戶同時訪問該網站,則會有20個活動工作線程。 ?如果20個用戶訪問創建三個線程的多線程應用程序(http://msdn.microsoft.com/en-us/library/system.threading.thread%28v=vs.110%29.aspx),然後會有是六十二的活動線程。但是經過一些進一步的研究我發現:

1) Worker Thread is synonymous to Background Worker (not main thread) 
2) The term Worker Thread means nothing to some people 

所以我的問題是:是工人線程與線程同義(http://msdn.microsoft.com/en-us/library/system.threading.thread%28v=vs.110%29.aspx?)或者是否表示主線程?

+0

可能是重複的http://stackoverflow.com/questions/1524249/what-is-a-worker-thread-and-its-difference-from-a-thread-which-i-create – SomeNickName

+1

我不'我認爲工作者線程有一個正式的定義,但我一直明白它並不是主要的UI線程。 –

回答

0

從我的理解,工作者線程不是一個UI線程。它允許代碼在不鎖定用戶界面(UI)的情況下運行。在UI線程上運行的任何代碼都會強制UI在代碼完成之前無響應。對此有一些解決方法(例如Me.Update()),但好的做法通常是在非UI線程上運行需要一秒以上的任何事情。

工作線程和線程之間的一個可能的差異是線程不一定會在完成到UI線程時報告它的進度或報告。我希望這有幫助。

1

我知道這只是一種非常通俗的(非技術)方式來理解事情,但我發現它非常容易理解工作線程的概念。

一般定義: -

A「工作線程」是運行在對他的老闆的順序執行一些後臺工作(我們可以把它叫做「客戶」)和更新工作,結果老闆的線程。

技術定義: -

工作線程通常被定義爲大幹快上客戶端的請求啓動一個線程。

例1:

1 - 我們有比薩餅店,那裏有10個個人誰是在準備美味的比薩餅專家。這些被稱爲「工作者線程」。

2-我們有一個接到客戶訂單的人。那個人被稱爲「客戶」。每當有新訂單來時,一旦準備好披薩,「工作者線程」就開始準備披薩並更新到客戶端。

3-當訂單少於10個時,有些工人只是理想。

4-當有超過10個訂單時,訂單就被放入等待隊列。

實施例2:

1-有用於偵聽端口8080

2-甲請求進入端口8080上的應用程序服務器。

3-偵聽器線程(稱爲「客戶端」)接受該請求並將其分派到完成請求的「工作線程」。實際上在應用服務器上維護着一個「工作線程」池(「工作線程」程序的許多對象)。

4-如果兩個請求同時進入,則分配兩個工作線程並同時執行任務。