首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于快速突发短线程的线程池?

用于快速突发短线程的线程池?
EN

Stack Overflow用户
提问于 2013-09-27 08:17:34
回答 1查看 782关注 0票数 2

我的应用程序在捕获线程中捕获网络数据包(如wireshark),并允许其他组件为捕获的数据包注册带有筛选条件的回调函数。现在,每次捕获这样的数据包时,我都会为每个回调用户启动一个线程:

代码语言:javascript
运行
复制
foreach (CCallbackFilterCondition hCallback in m_ahSubscribers)
{
  // Raise callbacks in separate threads so they don't block the capture thread
  ParameterizedThreadStart hPTS = new ParameterizedThreadStart(hCallback.raiseIfMeetsConditions);
  Thread hCallbackThread = new Thread(hPTS);
  hCallbackThread.Start(hPacket);
}

每个线程可能只运行几毫秒,但根据回调方法可以运行更长时间。每次捕获数据包时都会启动它们,这是非常频繁的。

我现在的问题是:启动一个新线程的开销有多大?与其以高频率创建新线程,不如使用一个不断运行的线程池吗?如果我的回调速度慢,这可能导致在旧线程仍在运行时启动许多新线程,因此我需要池中的大量线程,因此可能需要一个动态增长的池。但是,如果流量减少或高负载订阅者取消订阅,则可能导致许多空闲线程。你有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-27 08:31:12

我会使用.NET的ThreadPool。不要担心需要更多的线程,或者需要杀死无用的空闲线程: ThreadPool使用爬山启发式来确定线程的最佳数量,以达到最大的性能。

在这里了解更多关于ThreadPool如何工作的内容:http://msdn.microsoft.com/en-us/magazine/ff960958.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19045994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档