zoukankan      html  css  js  c++  java
  • JAVA的线程能够在多个CPU上执行么?

        这个是我一个技术相当好的哥们去面试的时候碰到的奇葩问题,那天,这个面试官的答案是不能。后来就带着这个问题去国内外的论坛上搜了一把。也是各说纷纭。实在是没有一个统一的答案。简直有点公说公有理。婆说婆有理的架势。

        几个意见大致例如以下,第一,不能,由于“进程是CPU进行调度的单位。而JVM是一个进程。于是就仅仅能跑在一个CPU上”。第二,“进程是CPU进行调度的单位。这没错。可是OS负责将一个进程在不同的CPU上调度到另外一个CPU上。而这个进程,则是由不同的线程构成的,那么说,线程还是在不同的CPU上执行了”。

    我更倾向于另外一种解释。于是核心问题就变成了讨论“JVM能不可以将线程安排到不同的CPU上去执行呢?”。


        终于,在SUN公司授权的《Java核心技术》,第7版卷II,第8版卷I。有关于“可执行线程”中。找到例如以下两句话:

        “今天。人们非常可能有单台拥有多个CPU的计算机,可是,并发运行的进程数并非CPU数目制约的。操作系统的时间片分配给每个进程。给人并行处理的感觉”。


        好吧,上面的这句话,并不能说明这个答案,可是当我看到以下的这句原话的时候。感觉答案就在这里了:

        "在具有多个处理器的机器上。每个处理器执行一个线程,能够有多个线程并行执行。

    当然,假设线程的数目多于处理器的数目,调度器依旧採用时间片机制"。这句话足以用来反驳那个出问题的人了,由于他的答案本身就是错的。


        虽然,尽信书不如无书,可是,还能有更好的选择么?带着这个问题,继续走下去~ Fighting~  ziwen@163.com  I enjoy PM、Java、Oracle. I'm an English lover as well~ ho ho~

    后记:
    更具体的信息能够參见有关Java虚拟机实现的“并发”系列解说。基本上每本关于Java虚拟机有关的书籍以及官方文档都会讲到JVM怎样实现线程的几种方式。

    基于系统内核。基于用户线程等等实现。JVM中的线程实现是本地化的~ 本地化的意思就是与平台有关了,虽然与平台有关,可是线程调度。仍旧是最佳高效的方式,有资料曾说过:线程的创建销毁与调度的开销是进程的三十分之中的一个。

  • 相关阅读:
    【C语言】中的版本规范(C89 C99等)
    【微机】计算机系统组成
    【微机】验证负数以补码存储程序 C语言
    katalon studio升级到6.3.3版本后如何生成测试报告
    使用Katalon Studio进行数据驱动测试的方法(转)
    katalon 参数化
    Katalon中的测试对象、用例和套件的命名规范
    转载kalaton故障处理
    Katalon Studio IE浏览器 不好用 无法录制
    Katalon Studio操作界面详细说明(转载)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7065591.html
Copyright © 2011-2022 走看看