我对线程有一些疑问: 在降低应用程序性能之前,进程允许的最大线程数是多少? 如果有限制,如何更改? 在多线程应用程序中是否应该运行理想数量的线程?如果它取决于应用程序正
>在降低应用程序性能之前,进程允许的最大线程数是多少?
>如果有限制,如何更改?
>在多线程应用程序中是否应该运行理想数量的线程?如果它取决于应用程序正在做什么,你能引用一个例子吗?
>影响这些性能/线程限制的因素有哪些?
>它是应用程序行为和运行时环境的函数,只能通过实验推断出来.通常会有一个阈值,在此阈值之后,当您增加线程数时,性能实际上会降低.
>通常,在找到限制后,您必须弄清楚如何重新设计应用程序,使每线程成本不高. (请注意,对于某些域,您可以通过重新设计算法并减少线程数来获得更好的性能.)
>没有通用的“理想”线程数,但有时您可以在特定运行时环境中找到应用程序的最佳线程数.这通常通过实验完成,并在改变基准的同时绘制基准测试结果:
>线程数.
>缓冲区大小(如果数据不在RAM中)以某个合理的值递增(例如,块大小,数据包大小,高速缓存大小等)
>改变块大小(如果您可以递增地处理数据).
> OS或语言运行时的各种调整旋钮.
>将线程固定到CPU以改善位置.
>影响线程限制的因素有很多,但最常见的因素是:
>每线程内存使用量(每个线程使用的内存越多,产生的线程越少)>上下文切换成本(使用的线程越多,切换的CPU时间就越多).>锁争用(如果依赖于大量粗粒度锁定,增加线程数会增加争用.)>操作系统的线程模型(如何管理线程?每线程成本是多少?)>语言运行时的线程模型. (协同程序,绿线程,操作系统线程,火花等)>硬件. (多少CPU /核心?是否超线程?是否适当地对线程进行负载均衡等)>等等(还有更多,但以上是最重要的.)