刘伟龙的博客

做更多(do more)、知道更多(know more)、成就更多(be more) ————陆奇

JVM系列之(九)Java多线程如何实现在多cpu上分布

解答:

  • 1.我们平时常用的JVM实现,Oracle/Sun的HotSpot VM,它是用1:1模型来实现Java线程的,也就是说一个Java线程是直接通过一个OS线程来实现的,中间并没有额外的间接结构。
  • 2.而且HotSpot VM自己也不干涉线程的调度,全权交给底下的OS去处理。所以如果OS想把某个线程调度到某个CPU/核上,它就自己弄了。这个意义上说Java程序跑在HotSpot VM上开多个Java线程,就跟一个C/C++程序开了多线程来跑没有任何两样。
  • 3.那么怎么控制这些线程分布到不同的CPU核上去呢?在Linux上的话,可以用taskset来把线程绑在某个指定的核上。在Java层面上,有大大写了个现成的库来利用taskset绑核:OpenHFT/Java-Thread-Affinity有兴趣的话可以参考一下。
  • 4.结束前提一下:JVM的实现有很多种,并不是所有JVM都像HotSpot VM这样总是用1:1模型的。前面的传送门已经有例子了所以这里就不多说,但还是想特别提一下免得给初学者留下“Java线程就肯定是OS线程”的误解。请务必针对实现来讨论这种问题。
阅读更多

扫码向博主提问

去开通我的Chat快问

lwl2014100338

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Spring
  • MyBatis
  • MySQL
  • Redis
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/79966328
个人分类: JVM
上一篇安硕信息面经
下一篇JVM系列之(十)对于一个很复杂的常量表达式,编译器会算出结果再编译吗?
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭