java - 操作系统中的进程和线程调度

标签 java multithreading process operating-system kernel

我正在学习操作系统类(class),并且学到了讨论进程和线程的部分。我知道 CPU 一次只能运行一个进程,因此有几种调度算法可以对就绪队列中的进程进行优先级排序。

现在,当我转向线程时,事情开始变得有些困惑。由于一个进程可能由多个线程组成,那么调度是针对单个线程还是针对每个进程?

例如:

我使用的是 Windows。我双击一首歌曲以在 VLC 中启动它,然后双击 MS Word 开始编写报告,最后打开 Chrome 来检查我的邮件。

让我们假设以下内容来简化事情:

  • VLC 进程只有一个线程。
  • MS Word 进程中有 5 个线程。
  • Chrome 会为我在浏览器中打开的每个标签页创建一个线程。
  • 所有这些程序都是用 Java 编写的,并且这些程序中的所有线程都是使用 Thread class 创建的。 .

现在哪个是用户线程,哪个是内核线程?

调度是在进程上还是在线程上?

线程数量较多的进程是否会运行更长时间,或者操作系统是否不知道每个进程中的线程数量?

最佳答案

应用程序是通过不同的语言开发的,不同的语言以不同的方式实现线程。基本上有两种不同的实现。

  1. 为应用程序中创建的每个线程创建单独的内核线程。
  2. 管理应用程序主线程内的应用程序创建的线程。

注意:Java 的实现也可能因 JVM 的不同而不同,因此这取决于所使用的 JVM 和操作系统。

回答你的下一个问题。调度将在线程上进行,而不是在进程上进行。

关于java - 操作系统中的进程和线程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389765/

相关文章:

在 IE10 中重新加载另一个框架时,Java Applet 失败/消失

Java正则表达式 - 按组搜索字符串

java - 一次运行一个线程(而不是并行)

c# - C# 中的基本多线程问题

c++ - 如何比较两个 HANDLE 类型的变量

java - 如何将特定数据从 ArrayList<GetterSetter> 对象显示到 ListView?

java - Tomcat:传递 -XX:MaxPermSize 没有明显效果

powershell - 在超时的情况下从PowerShell运行程序

c# - 重负载应用程序卡住

process - BDD features of features,我应该制作一个新故事还是属于某个场景?