Java多线程如何实现在多CPU上分布

一个JAVA线程就是一个OS线程,线程调度依赖于操作系统,JVM层面不干预。JAVA语言层面讲,只是规范,并不要求具体如何实现。具体的实现模型有几种,比如1:1,N:1, 1:N。在LINUX下,你可以用JNI来调用taskset,实现把线程分配到某一个CPU上。

Java多线程如何实现在多CPU上分布-Worktile社区

一个JAVA线程就是一个OS线程,线程调度依赖于操作系统,JVM层面不干预。JAVA语言层面讲,只是规范,并不要求具体如何实现。具体的实现模型有几种,比如1:1,N:1, 1:N。在LINUX下,你可以用JNI来调用taskset,实现把线程分配到某一个CPU上。

Java语言的线程,从规范的角度来说是不强制要求任何具体的实现方式的。采用1:1、N:1、M:N模型都可以。

具体到我们平时常用的JVM实现,Oracle/Sun的HotSpot VM,它是用1:1模型来实现Java线程的,也就是说一个Java线程是直接通过一个OS线程来实现的,中间并没有额外的间接结构。而且HotSpot VM自己也不干涉线程的调度,全权交给底下的OS去处理。所以如果OS想把某个线程调度到某个CPU/核上,它就自己弄了。

这个意义上说Java程序跑在HotSpot VM上开多个Java线程,就跟一个C/C++程序开了多线程来跑没有任何两样。那么怎么控制这些线程分布到不同的CPU核上去呢?

在Linux上的话,可以用taskset来把线程绑在某个指定的核上。

JVM的实现有很多种,并不是所有JVM都像HotSpot VM这样总是用1:1模型的。在JVM里面也存在内存屏障(jvm的内存屏障),因为不是实体的机器,是逻辑的概念;所有实现JVM规范的虚拟机,必须实现四个屏障,Load和stored的四种组合;volatile也是这个作用可见性,和静止指令重排,那在最终的CPU是如何实现JVM规定的这些规范的呢?通过Hotspot(热点),通过汇编语言,lock、add来对CPU寄存器前面加零,也就是总线和缓存锁的概念。

延伸阅读:

什么是多线程

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。

在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。

文章标题:Java多线程如何实现在多CPU上分布,发布者:小编,转载请注明出处:https://worktile.com/kb/p/36327

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年1月31日 下午8:15
下一篇 2023年1月31日 下午8:16

相关推荐

  • 什么是项目计划管理

    项目计划管理是一系列过程与活动的合集,目的在于指导及确保一个项目从启动到完成都能够有序、有效地进行。它涉及多个维度,包括但不限于项目范围、时间、成本、质量、通信、风险及采购等。一个项目计划对于达成项目目标至关重要,因为它提供了一个详细的路线图来指导项目团队和利益相关者。通常情况下,项目计划管理包括定…

    2024年1月8日
    23900
  • devops需要掌握什么

    DevOps需要掌握的要点:在当前快速演变的软件开发领域,DevOps专家的角色变得尤为重要。他们负责弥合软件开发(Dev)与信息技术运维(Ops)之间的鸿沟,以确保快速而高质量的软件交付。要惊艳业界,DevOps人员需精通1、编程与脚本能力;2、理解各种CI/CD工具;3、云服务知识;4、容器化技…

    2024年3月26日
    8000
  • 硬件研发管理系统

    标题:硬件研发管理系统 摘要:硬件研发管理系统关键于提高开发效率、缩短产品上市时间、降低成本以及提升产品质量。一、辅助决策和优化资源分配。二、保障项目按时完成并追踪进度。三、促进团队合作与信息共享。四、贯穿产品生命周期的全面管理。这些功能模块融合为组织提供了全方位的硬件研发管控。尤其是第四点,贯穿产…

    2024年1月9日
    26500
  • 什么是SMT(satisfiabilitymodulotheories)

    SMT的全称是Satisfiability Modulo Theories,可被翻译为”可满足性模理论”,“多理论下的可满足性问题”或者”特定(背景)理论下的可满足性问题”,其判定算法被称为SMT求解器.简单地说,一个SMT公式是结合了理论背景的逻辑公式,其中的命题变量可以代表理论公式. SMT的全…

    2023年2月22日
    1.4K00
  • 一个企业为什么需要知识库的搭建

    原因是:1. 提高知识管理效率;2. 促进知识共享和协作;3. 改善员工培训和学习;4. 提高客户满意度;5. 提高企业竞争力。企业面临着大量的知识资料,这些资料的数量庞大、种类繁多,如果不进行有效的管理和利用,就会造成信息孤岛和信息浪费。 1. 提高知识管理效率 企业面临着大量的知识资料,包括各种…

    2023年2月28日
    55400
  • 嵌入式编程语言有哪些

    嵌入式编程语言有:1、Ada语言;2、C语言;3、C++;4、ASP;5、JSP;6、PHP;7、JavaScript。Ada语言是指,20世纪70年代美国国防部开发并投入使用的功能强大的通用系统开发语言。它支持模块化、独立编译、协处理等功能。 1、Ada语言 Ada语言是20世纪70年代美国国防部…

    2023年1月6日
    3.7K00
  • 孩子什么时候学编程

    摘要 孩子应该在7至10岁之间开始学习编程。这一年龄段的儿童通常已经具备了一定的阅读能力、逻辑思维和解决问题的初步技能,这为学习编程奠定了基础。关键的理由之一是培养逻辑思维能力。通过编程,孩子们能够学会如何分析问题、设定步骤解决问题,并逐渐学会逻辑思维的重要性。这种技能的早期培养不仅对编程学习有益,…

    2024年4月25日
    700
  • pc办公软件有哪些

    国外的办公软件有:一、Worktile;二、Google Docs;三、Office 365;四、WPS云文档;五、一起写;六、Quip;七、Slack;八、Hipchat;九、Teambition。Worktile 是一个专注于提高企业协作效率的平台,它以任务看板方式展现团队内部的信息和分工安排。…

    2023年3月31日
    34200
  • Java编译器哪个好用

    Java编译器有:1、CodeSandbox;2、CodePen;3、JSRUN;4、jsFiddle;5、Ideone。CodeSandbox,基于 React 的在线代码沙盒平台。主流的脚手架都支持,比如在线create-react-app,vue-cli等。 一、CodeSandbox 主流的…

    2023年2月9日
    77300
  • 移动办公OA软件有哪些

    移动办公OA软件有:1、OA办公;2、云OA;3、智办公;4、智旦OA;5、企业微信。OA办公是一款集合数字办公的平台,可以开展多人一起工作,可以实时推送给员工办公信息,采用了创新的工作类型,开展多项办公功能,达到了统一的智能办公标准,可以满足不同类型客户的需要。 一、OA办公 OA办公是一款集合数…

    2023年5月7日
    37100

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部