比如我写了一个多线程的JAVA程序
这个程序在执行时,是有几个进程呢?
比如放在四核CPU上执行,是不是只有一个进程?
是不是只有一个核能发挥作用,其他三个核都是空闲的?

解决方案 »

  1.   

    底层CPU怎么用多核优化指令流是底层的事,CPU是不知道进程的
    进程只是OS里的数据结构,一个Java程序就一个进程
      

  2.   

    请教SIGMOD一下
    那是否意味着,我用JAVA多线程写了一个程序
    但是执行效果在多核的电脑上和单核的电脑上是一样的呢?
      

  3.   

    线程跟进程是2个不同的概念。 进程和线程的区别在于:
    简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
    线程的划分尺度小于进程,使得多线程程序的并发性高。
    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 
    你写的那个简单的线程程序只有一个进程,不过它可以有多个线程。跟CPU无关。CPU内核多少只是保证了你进程和线程的执行速度。
      

  4.   

    那JAVA如果在一个程序中,分为几个进程呢?
    不然多核的优势就没用了
    我目前正在考虑是否需要购买多核的电脑呢
    请楼上几位多指点哈
      

  5.   


    创建进程,需要调用Runtime了,而且如果你多线程需要协同,就变成进程通信了,每个进程有自己独立的地址空间,不能共享变量的就算只有一个单线程进程,多核也会快点的,CPU对指令流水做了优化,何况你还是多线程进程,但4核就快4倍是理论上不可能的
      

  6.   

    也就是说,我现在写一个JAVA程序,在四核电脑上运行
    这个程序只用一个进程,但是是多线程
    那么速度比较而言,会比在单核CPU上执行的速度快不少.
    我这样理解对么?能否大致的帮忙估算一下,能快多少哦?
    谢谢
      

  7.   

    一个应用程序一个进程,可以多个线程!不管你用N个处理器,一个JAVA程序就是一个进程,为什么使用多线程效率会高呢?
    举个简单的例子,有两个能力相同的人,他们一起做一个任务快,还是一个人做一个任务快?虽然不能代表比一个人做2倍,但是可以说是有了很大的进步!
      

  8.   


    恩,是的,但快多少就很难估算,不光是CPU的问题,
    取决于你的系统负载,程序中的IO操作,线程同步的情况,等等
    你找个机器跑了测测看吧
      

  9.   

    谢谢楼上的两位
    最后一个傻问题,Q6600是真四核么?它的主频是2.4G
    如果用Q6600来跑,会比同用3G的频率的双核效果好么?最后一个问题,呵呵.一会就结帖
      

  10.   

    人觉得比3G的好点,你Q6600可以超频到3.6G。 呵呵 
      

  11.   

    如果是多处理器的系统,线程还会被分到多个处理器上,这样就能大大提高(指令的)吞吐率了。通常多处理器的Web服务器就是这样做的,它会为每个请求分配一个线程,这样就把多个请求分摊给各个CPU了。有一点要记住,那就是多线程程序也必须能运行在单CPU系统上。因此,即便不用多线程也应该能写出相同的程序。但是多线程提供了一种非常重要的,程序结构方面的优势,因而能大大简化软件的设计。对于像仿真模拟之类的视频游戏,如果不用多线程,真不知道该怎么解决。多线程模型大大简化了"让一个程序同时做几件事"这个难题。在多线程环境下,CPU会不断地在线程之间进行切换,给它们分配时间。在线程看来,它能随时获得CPU,但实际上CPU的时间已经被分配给了所有线程。这里有个例外,如果程序是运行在多CPU的系统上,那么线程就真有可能独占整个CPU了。但是多线程最值得称道的还是它的底层抽象,即代码无需知道它是运行在单CPU还是多CPU的系统上。由此,你可以用多线程来创建可透明扩展的程序——如果程序运行得太慢了,直接在机器上加CPU就行了。多任务与多线程是充分利用多处理器系统的好办法。在单CPU系统里,线程会多少影响程序的运算效率,但是通算下来,它在程序结构,平衡资源以及用户的舒适度方面的优势还是远远超过了性能方面的损失。总之,多线程能令你设计出更为松散耦合(more loosely-coupled)的应用程序;否则,你就得多写很多代码,把那些本应交由多线程去处理的事情揽到自己头上了。