猿问

多少线程太多了?

多少线程太多了?

我正在编写一个服务器,当请求传入时,我将每个动作分支到一个线程中。我这样做是因为几乎每个请求都会进行数据库查询。我正在使用线程池库来减少线程的构造/破坏。

但是,我的问题是-对于这样的I/O线程来说,什么是一个好的临界点?我知道这只是一个粗略的估计,但我们说的是数百人吗?成千上万?


编辑:

谢谢大家的回应,似乎我要测试一下才能找到我的线计数上限。但问题是:我怎么知道我撞到了那个天花板?我该测量什么?



慕尼黑8549860
浏览 716回答 3
3回答

慕盖茨4494581

这个问题讨论得很透彻,我没有机会阅读所有的答复。但是,在查看可以在给定系统中和平共存的同步线程数量上限时,需要考虑以下几点。线程堆栈大小:在Linux中,默认的线程堆栈大小是8MB(您可以使用uLim-a查找它)。给定操作系统变体支持的最大虚拟内存。LinuxKernel2.4支持2GB的内存地址空间。使用内核2.6,我要大一

慕斯王

如果您的线程正在执行任何类型的资源密集型工作(CPU/磁盘),那么您将很少看到超过一两个的好处,而且过多的线程会很快降低性能。“最好的情况”是,以后的线程在第一个线程完成时会停止运行,或者一些线程在资源上具有低开销的低争用块。最糟糕的情况是,您开始破坏缓存/磁盘/网络,而您的总体吞吐量则下降。一个好的解决方案是将请求放在一个池中,然后将请求从线程池发送给工作线程(是的,避免连续的线程创建/破坏是一个伟大的第一步)。然后,可以根据分析结果、正在运行的硬件以及机器上可能发生的其他事情来调整和缩放此池中的活动线程数。
随时随地看视频慕课网APP
我要回答