首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS线程调度器是否被JVM覆盖?

OS线程调度器是否被JVM覆盖?
EN

Stack Overflow用户
提问于 2017-05-30 16:48:27
回答 2查看 752关注 0票数 0

根据以下资源,线程调度由操作系统或JVM完成,或者两者兼而有之。

1.http://tutorials.jenkov.com/java-concurrency/creating-and-starting-threads.html

2.https://www.javatpoint.com/thread-scheduler-in-java

我的问题:

1.谁安排线程?

2.线程调度程序是否在任何地方被重写?(就像JVM线程调度程序覆盖的OS线程一样)

3.如何从抢占式调度转变为时间切片式调度?反之亦然?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-30 17:01:57

  1. 谁来安排线?

操作系统。尽管在应用程序级别,您的JRE可以根据线程优先级来调度应用程序级别的线程;但是,它最终还是会由操作系统的调度器(调度块)来调度。用户级线程由用户级库管理,但它们仍然需要内核系统调用才能操作。

  1. 线程调度程序是否在任何地方被重写?(就像JVM线程调度程序覆盖的OS线程一样)

Java运行时环境支持一种非常简单、确定性的调度算法,称为固定优先级调度.实际的调度程序在操作系统中是唯一的;它从全局的角度来处理线程调度,而不是从Java/应用程序级别的角度。

  1. 如何从抢占式调度转变为时间切片式调度?反之亦然?

除非您修改操作系统内核,否则不能更改调度程序的调度性质,这是低级的事情。即使在JRE中,您也不能在应用程序级别更改线程调度。

Attribution: Thread Scheduling tutorial.

票数 4
EN

Stack Overflow用户

发布于 2017-05-30 17:05:10

  1. JVM调度一个Java (尽管在现实中,它是由操作系统执行的)。
  2. 没有单一的Java;JVM是一个规范,它有多个实现,其中包括OpenJDK版本和Sun版本。任何合理的JVM都会简单地使用操作系统提供的底层线程机制,否则就会出现离散,这将意味着UNIX (Mac、Linux等)上的POSIX线程(线程)。并在Windows上暗示WIN32线程。通常,这些系统默认使用循环策略。

3. JVM一般不执行任何调度。这是操作系统的任务。例如,Linux有可配置的调度选项,如果要添加新的调度策略,可以更改内核。

但是,根据您想要这样做的原因,您可以以另一种方式解决这个问题,例如使用自定义执行器或反应堆风格的框架,或者有效地禁用CPU的调度,并使用Java自己完成所有工作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44267787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档