我正在尋找一個線程池庫中的.NET輕量級線程池庫中的.NET
- 我應該能推約100.000任務,因此應爲「堵」的支持。 (顯然我不能一下子推這麼多的任務,所以應該支持一些阻塞而增加新的任務,直到新的可用插槽應該阻塞的線程)
- 不是太複雜
- 沒那麼貴(內存 - CPU明智)
- 自由/開源(商業友好的許可證)
我已經有我自己的解決方案,它支持所有這些,但我不能肯定,如果這是最好的實現或不。所以我想看看其他圖書館。
這將主要用於HTTP請求,所以CPU更少響應等待。這意味着100個併發線程可以接受。
我正在尋找一個線程池庫中的.NET輕量級線程池庫中的.NET
我已經有我自己的解決方案,它支持所有這些,但我不能肯定,如果這是最好的實現或不。所以我想看看其他圖書館。
這將主要用於HTTP請求,所以CPU更少響應等待。這意味着100個併發線程可以接受。
感謝所有回覆,在經過其他圖書館之後,我注意到他們對於我所尋找的內容都非常複雜。
我堅持我自己的實現,這基本上是一個圍繞Threading.Thread()
阻塞隊列實現,它工作得很好。
爲什麼不使用.NET ThreadPool?
如果您有很多任務,請考慮實施service bus或第三方中間件平臺,如BizTalk。如果這太多了,那麼普通的Message Queuing。
此外,如果您擁有SQL Server並希望更容易備份和管理隊列,請考慮SQL Server Service Broker。
我最近見過的最好的是傑弗裏裏希特的PowerThreading library。您可能還想查看this Channel 9 video
PowerThreading庫的好處在於,它通過允許跨多個請求共享單個線程來有效使用ThreadPool。
我在CodeProject上找到了ThreadPool上的interesting take。它是一個實例化的ThreadPool(因此,不是靜態的並且跨線程切片),並且它具有若干功能來自定義性能。
Retlang岩石!或來自Ayende的Rhino Queues。
查看微軟的CCR。它有一個非常高效的線程池,並且具有可以直接處理許多異步I/O請求的原語。
在它的模型下,提供您的I/O是真正異步的,您需要的線程數量恰好就是您盒子上的核心數量。更多是浪費。
我有同樣的需要你,但我的問題是用不同的方式措辭,以達到非常相似的答案: Is there any way for executing a method multiple times, but managing connections/threads? (.NET)
看起來很有趣,如果我能理解LINQ fu我會給它一個鏡頭。 – 2009-02-19 08:02:28
.NET 4.0中添加任務並行庫將必須對這種直接的支持。如果您不知道它,它既可以作爲基於.Net 3.5的獨立CTP,也可以作爲去年秋季推出的Visual Studio 2010 CTP的一部分。這裏有一個指向team blog的鏈接,它有更多的信息和一個指向下載的指針。
你有沒有使用過.NET Threadpool並閱讀我的需求?因爲.Net線程池並不適合這個。無法一次處理100個線程,會消耗太多內存,並且設計上沒有阻塞功能。 – 2009-02-17 23:49:16