根据以下资源,线程调度由操作系统或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.如何从抢占式调度转变为时间切片式调度?反之亦然?
发布于 2017-05-30 17:01:57
操作系统。尽管在应用程序级别,您的JRE可以根据线程优先级来调度应用程序级别的线程;但是,它最终还是会由操作系统的调度器(调度块)来调度。用户级线程由用户级库管理,但它们仍然需要内核系统调用才能操作。
Java运行时环境支持一种非常简单、确定性的调度算法,称为固定优先级调度.实际的调度程序在操作系统中是唯一的;它从全局的角度来处理线程调度,而不是从Java/应用程序级别的角度。
除非您修改操作系统内核,否则不能更改调度程序的调度性质,这是低级的事情。即使在JRE中,您也不能在应用程序级别更改线程调度。
Attribution: Thread Scheduling tutorial.
发布于 2017-05-30 17:05:10
3. JVM一般不执行任何调度。这是操作系统的任务。例如,Linux有可配置的调度选项,如果要添加新的调度策略,可以更改内核。
但是,根据您想要这样做的原因,您可以以另一种方式解决这个问题,例如使用自定义执行器或反应堆风格的框架,或者有效地禁用CPU的调度,并使用Java自己完成所有工作。
https://stackoverflow.com/questions/44267787
复制相似问题