【发布时间】:2010-10-03 16:14:15
【问题描述】:
我正在编写一个服务器,并在收到请求时将每个操作发送到一个单独的线程中。我这样做是因为几乎每个请求都会进行数据库查询。我正在使用线程池库来减少线程的构造/销毁。
我的问题是:像这样的 I/O 线程的好的截止点是什么?我知道这只是一个粗略的估计,但我们是在谈论数百个吗?几千?
我将如何确定这个截止值是多少?
编辑:
感谢大家的回复,看来我只需要对其进行测试以找出我的线程数上限。但问题是:我怎么知道我已经达到了那个天花板?我到底应该测量什么?
【问题讨论】:
-
@ryeguy:这里的重点是,如果一开始没有性能问题,您不应该在线程池中设置任何最大值。大多数将线程池限制为约 100 个线程的建议都是荒谬的,大多数线程池的线程数都比这多/way/ 多,而且从来没有问题。
-
黑麦,请参阅下面我的答案的补充内容。
-
不要忘记 Python 是天生的,并不是真正的多线程友好。在任何时间点,都会执行单个字节码操作码。这是因为 Python 使用了全局解释器锁。
-
@Jay D:我会说你达到天花板的那一刻就是你的表现开始下降的时候。
-
@GEOCHET “这里的重点是你不应该在线程池中设置任何最大值” 嗯......说什么?固定大小的线程池具有优雅降级和可扩展性的好处。例如。在网络设置中,如果您基于客户端连接生成新线程,而没有固定的池大小,您将面临学习(困难方式)服务器可以处理多少线程的真正危险,并且每个连接的客户端都会受到影响。一个固定大小的池就像一个管道阀门,它不允许你的服务器试图咬掉它可以咀嚼的东西。
标签: multithreading performance threadpool