小弟有个关于多CPU下跑多线程的问题:
  现在应用场景是这样的,一个B/S系统,用户提交请求到服务器端之后,服务器开始计算,计算过程使用多线程实现。服务器使用的是多CPU(4个哦CPU)的服务器,但是测试中发现尽管线程数已经调到很高(>40个线程),但是仅仅是1个CPU被使用,使用率仅为60%,其它CPU的使用率都为0%。
请问如果要将4个CPU都利用上该如何实现?是需要配置服务器吗?还是可以通过程序进行控制?
 (应用中使用websphere,jdk1.4)

解决方案 »

  1.   

    你小弟,我更小弟了!哈哈!!我一直都不关心多核性能的发挥。虽然服务器基本都是两个CPU。JDK1.4是不是支持真并发还有待证明。这样,先看看你的操作系统是否支持多核操作。只有Thread对象才构成虚拟CPU,这个对象才有能力选择CPU。多线程的数据是否放入主存,是否使用原子术语?写个多线程测试一番在下个结论出来,看看是不是你的容器使用了线程池技术,线程池却是一个!
      

  2.   

    不会啊,我也曾经做过类似的,但是不管怎么,都是两个cpu分担任务,各占一半cpu
      

  3.   


    在程序中并没有使用Java已有的容器。而是自己写了一个管理线程的调度类(也是一个线程),来负责线程通信和线程调度。由于设计的调度线程也是一个thread对象,而且并不与并发的其它线程有所属关系,和你说的线程池容器应该只是部分功能相同,当并不是。(不知道你说的线程池是否是concurrent下的东东)
      

  4.   

    不会呀,CPU都在占用,普通写就行的
      

  5.   

    sun自己的jvm就是有这个问题。我做过一些项目,cpu的均衡使用时weblogic的jrocket这个jvm比较好。
    4个cpu是平均使用的。
      

  6.   

    weblogic的jrocket,很好的建议,去试试