Java 多线程
Java 多线程
村长大神 发表于3年前
Java 多线程
  • 发表于 3年前
  • 阅读 194
  • 收藏 14
  • 点赞 0
  • 评论 2

腾讯云 新注册用户 域名抢购1元起>>>   

 

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中的线程实现是本地化的~ 本地化的意思就是与平台有关了,尽管与平台有关,但是线程调度,仍旧是最佳高效的方式,有资料曾说过:线程的创建销毁与调度的开销是进程的三十分之一。

 

共有 人打赏支持
粉丝 157
博文 441
码字总数 607059
评论 (2)
名字太难取了
我也认为是可以的 因为那都是操作系统的调度 java本身没有相关api就武断说不能的人那种公司也没什么好去的
蛋看江湖
面试官技术没到家而已,太小看Jvm了,Java生态圈最重要的产物是就是Jvm啦
×
村长大神
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: