2015-10-28 30 views
2

我有一個應用程序(永遠運行守護進程應用程序),它必須管理物理設備(例如RS485設備)和系統內應用程序之間的通信(請求和響應) - 就像許多應用程序與硬件通信的「通信層」設備。很多短命線程的方法?

Applications_Send_Request - > Communication_Layer_Forwards_To_Devices - > Communication_Layer_Gets_Response - > Application_receives_response。

其中I FWD所述請求的裝置和獲得響應可以是異步工作的一部分。

我打算創建一個線程,這將在應用程序接受其他請求的後臺執行此操作。

現在,這個線程將是短暫的 - 大約幾毫秒到幾秒鐘。

我可能會得到幾百請求的每一秒 - 這樣的應用程序創建大量短命的線程和刪除它們 - 永遠持續這樣做。

關注: 1 - 創建數千個線程(雖然他們很短暫)。 2 - 應用程序運行時間非常長 - 可以永久運行。

上述設計是否正常並且安全,當線程使用非常嚴重時,就像這樣。

+3

你可以使用線程池 –

+1

你的想法基本上就是一個線程池。如果您使用「任務」或「任務」安排您的工作,那麼也將使用ThreadPool。你可以在這裏查看MSDN文檔:https://msdn.microsoft.com/en-us/library/system.threading.threadpool(v=vs.110).aspx – vesan

+0

查看這篇關於創建CustomThreadPool的文章。這是非常詳細的,但是,類似的模式用於需要維持恆定操作狀態的windows服務。 http://www.codeproject.com/Articles/548865/Create-a-Custom-ThreadPool-in-Csharp –

回答

2

使用Windows thread pool此,通過System.Threading.ThreadPool曝光。

Windows上的線程手動啓動和關閉的代價非常高。即使在空閒時也會佔用大量的用戶和內核內存,並且維護起來非常重量級。

Windows提供了線程池的API專門解決運行大量的在不同的線程獨立短命的並行任務的問題,使程序不需要通過創建自己的系統過載。關於選擇線程池的一個非常好的討論可以在這裏找到:https://stackoverflow.com/a/230023

如果你只是讓操作系統管理你的線程,你的程序將更小,更快,更簡單,更容易維護。

+0

謝謝。欣賞它。 – bkj