2009-02-17 92 views
6

我正在尋找一個線程池庫中的.NET輕量級線程池庫中的.NET

  • 我應該能推約100.000任務,因此應爲「堵」的支持。 (顯然我不能一下子推這麼多的任務,所以應該支持一些阻塞而增加新的任務,直到新的可用插槽應該阻塞的線程)
  • 不是太複雜
  • 沒那麼貴(內存 - CPU明智)
  • 自由/開源(商業友好的許可證)

我已經有我自己的解決方案,它支持所有這些,但我不能肯定,如果這是最好的實現或不。所以我想看看其他圖書館。

這將主要用於HTTP請求,所以CPU更少響應等待。這意味着100個併發線程可以接受。

回答

0

感謝所有回覆,在經過其他圖書館之後,我注意到他們對於我所尋找的內容都非常複雜。

我堅持我自己的實現,這基本上是一個圍繞Threading.Thread()阻塞隊列實現,它工作得很好。

2

爲什麼不使用.NET ThreadPool?

+1

你有沒有使用過.NET Threadpool並閱讀我的需求?因爲.Net線程池並不適合這個。無法一次處理100個線程,會消耗太多內存,並且設計上沒有阻塞功能。 – 2009-02-17 23:49:16

1

如果您有很多任務,請考慮實施service bus或第三方中間件平臺,如BizTalk。如果這太多了,那麼普通的Message Queuing

此外,如果您擁有SQL Server並希望更容易備份和管理隊列,請考慮SQL Server Service Broker

3

我最近見過的最好的是傑弗裏裏希特的PowerThreading library。您可能還想查看this Channel 9 video

PowerThreading庫的好處在於,它通過允許跨多個請求共享單個線程來有效使用ThreadPool。

0

我在CodeProject上找到了ThreadPool上的interesting take。它是一個實例化的ThreadPool(因此,不是靜態的並且跨線程切片),並且它具有若干功能來自定義性能。

2

查看微軟的CCR。它有一個非常高效的線程池,並且具有可以直接處理許多異步I/O請求的原語。

在它的模型下,提供您的I/O是真正異步的,您需要的線程數量恰好就是您盒子上的核心數量。更多是浪費。

1

.NET 4.0中添加任務並行庫將必須對這種直接的支持。如果您不知道它,它既可以作爲基於.Net 3.5的獨立CTP,也可以作爲去年秋季推出的Visual Studio 2010 CTP的一部分。這裏有一個指向team blog的鏈接,它有更多的信息和一個指向下載的指針。