为了账号安全,请及时绑定邮箱和手机立即绑定

线程与线程池

线程与线程池

慕田峪4524236 2019-07-27 15:15:57
线程与线程池使用新线程和使用线程池中的线程有什么区别?有哪些性能好处,为什么要考虑使用池中的线程而不是显式创建的线程?我在这里特别想到.NET,但是一般的示例很好。
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

线程池将为频繁和相对较短的操作提供好处。

  • 重用已经创建的线程,而不是创建新线程(一个昂贵的进程)
  • 当出现对新工作项的大量请求时,限制线程创建的速度(我相信这仅在.NET 3.5中)

    • 如果您对100个线程池任务进行排队,它将只使用已经创建的线程来处理这些请求(例如,10个线程)。线程池将进行频繁检查(我相信3.5SP1中每500 ms),如果有排队的任务,它将生成一个新线程。如果您的任务是快速的,那么新线程的数量将很小,并且在短任务中重用大约10个线程将比预先创建100个线程更快。

    • 如果您的工作负载始终有大量的线程池请求,那么线程池将根据上面的进程在池中创建更多的线程来调整自己的工作负载,以便有更多的线程可用于处理请求。

    • 查帐这里有关线程池如何在引擎盖下工作的更深入信息。

如果任务的运行时间相对较长(可能大约一两秒钟,但这取决于具体情况),那么自己创建一个新线程就更合适了。

线程池线程是后台线程,当主线程结束时将停止。默认情况下,手动创建的线程是前台(主线程结束后将继续运行),但可以在调用启动线程之前将其设置为后台。




查看完整回答
反对 回复 2019-07-28
?
当年话下

TA贡献1890条经验 获得超9个赞

.NET托管线程池:-

  • 根据当前工作负载和可用硬件对自身进行调整。
  • 包含工作线程

    完成端口线程(专门用于服务IO)
  • 对大量相对较短的操作进行优化。

其他线程池实现可能更适合长期运行的操作。

具体来说,使用线程池来阻止应用程序创建太多线。线程池最重要的特性是工作队列。也就是说,一旦您的机器足够繁忙,线程池将排队请求,而不是立即产生更多的线程。

因此,如果您要创建一个小的,有限制的线程数量创建他们自己。如果您无法预先确定可能创建多少线程(例如,它们是在响应传入IO时创建的),并且它们的工作将是短暂的,请使用线程池。如果您不知道有多少,但他们的工作将长期运行,平台中没有什么可以帮助您-但您可能能够找到适合您的替代线程池实现。



查看完整回答
反对 回复 2019-07-28
  • 3 回答
  • 0 关注
  • 302 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信