`

线程数

 
阅读更多

      增加线程数可以提高应用的处理能力,但线程数过多,CPU频繁切换线程会影响性能。 

 

       最好的状态是一直使CPU一直保执忙碌状态,如果主机上有两颗四核CPU,那么至少需要8条线程,才能充分利用CPU,如果线程中有阻塞等待,就需要更多的线程供CPU调度执行,否则CPU闲置,如果线程执行相同的任务,阻塞时间与执行时间相等,那么就需要8*2=16条线程。即(阻塞时间/线程执行时间+1)*cpu核心数。

      

     实际中线程执行的任务类型不同,阻塞时间也不相同,不好计算出线程数。 可以通过不同线程数下做压力测试来确认最佳线程数。 

 

  Runtime.getRuntime().availableProcessors() 可以获取可用的CPU核心数。

 

 一项工作任务划分成多个子任务,由多个线程去执行,可以提高处理速度。

子任务的数量应多于线程数,细粒度的。这样执行快(小任务)的线程完成后,可以有待处理任务操作,不至于空等其它长任务线程执行完。

 

 对于需要持续处理的批量工作任务:

       可以每一个工作任务为由一条线程执行,如果工作任务中有阻塞等待,可以扩大线程数,提高并行处理能力,即同一时刻可以处理更多的任务。每一个工作任务都由单线程完成,单任务的完成时间不理想。

       如果将每一个工作任务拆分成多个子任务,即一个工作任务会占用多条线程,缩短单任务的完成时间,但会减少并行任务处理能力,而且可能需要处理多线程执行结果的合并和保证同一任务的子任务并行或相对并行。

       如果任务中有不必立即处理的或可异步的,可以交给其它线程或定时任务处理,当前线程返回,减少任务执行时间。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics