解决方案 »

  1.   

    启动线程的个数应等于cpu核数?什么意思
      

  2.   

    效率高低,不在于一个进程中是否存在其他线程,而在于其他线程都在干什么。
    JVM进程启动的时候,一个进程中就已经启动了很多个线程了,其中包含垃圾回收线程。
    如果进程中其他线程,都在做CPU密集型的任务,那么,你再做几个线程也来抢CPU的运行时间片,总的执行效率当然会降低。
    但是,这种情况下,如果新建进程做CPU密集型任务,效率就会提高一些,因为你是在和其他进程抢CPU的时间片,
    而不是抢一个进程中的CPU时间片。进程是系统资源分配的最小单位。
    Tomcat容器里面会有线程池,但是,这些线程,通常情况下(没有负载时)都处于阻塞状态,如果有大量用户访问了上面的站点项目,或者,上面项目中有频繁的后台任务在执行,占用了较高的CPU使用频率,那么,最好的解决办法,就是换台服务器或者等服务器负载较低的时候,再执行CPU密集型的运算任务。
      

  3.   

    总体来说,就是要着眼于整个系统的大环境下,而不要纠结于一个进程之内。
    比如,我有一个双核CPU的电脑,在上面并发执行四个几十G的视频转码任务,同时,再执行楼主的多线程CPU密集型任务。
    你觉得,后面的任务,能用多高的效率?
    再比如,同样的电脑,上面已经运行了将近一千个进程,(随便装他几十个大型应用类软件,再把所有的后台服务都启动,数量就差不多了),这个时候,启动一个JVM,再运行CPU密集型运算,这时的效率肯定也会有些偏低,因为,操作系统当前环境中的进程数量太多,进程切换、线程切换也要占一定的资源,从而影响CPU的使用。当然,这种极端的现象因人而异(是因机器而异),有很多人都不相信,以前单核、双核笔记本,实际使用中就会出现这种瓶颈。