我正在编写一个服务器,当请求传入时,我将每个动作分支到一个线程中.我这样做是因为几乎每个请求都进行数据库查询.我正在使用线程池库来减少线程的构造/销毁.
我的问题是 - 像这样的I/O线程有什么好的截止点?我知道这只是一个粗略的估计,但我们是在说几百个?成千上万的?
谢谢大家的回复,似乎我只是要测试它以找出我的线程数上限.问题是:我怎么知道我达到了这个上限?究竟应该测量什么?
我使用线程池来执行任务,这些任务主要是基于cpu的I/O,大小比cpus的数量大1.
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1)
Run Code Online (Sandbox Code Playgroud)
简单的程序的假设情况下提交的所有任务,在此执行程序并没有什么别的我假设有一个线程池的任何较大会减慢事情,因为操作系统将不得不时间片它的CPU往往机会给每个线程的线程池机会跑.
这是正确的,如果这是一个真正的问题或主要是理论上的,即如果我将线程池大小增加到1000我会注意到一个巨大的差异.
我正在做一个webcrawler并使用线程下载页面.
我的程序性能的第一个限制因素是带宽,我永远无法下载它可以获得的更多页面.
第二件事是我感兴趣的.我正在使用线程同时下载许多页面,但是当我创建更多线程时,会发生更多的处理器共享.是否有一些度量/方式/类测试来确定什么是理想的线程数,或者如果在一定数量之后,性能不会改变或减少?
我想确定我能为我的排序算法创建的最大线程数.我想使用java.lang.Runtime.
我想计算当前线程数量并在达到限制时停止创建新线程.