java - 时间片、上下文切换和线程干扰的区别

标签 java multithreading context-switch

作为多线程的初学者,我对这些术语有点困惑。有人可以帮我在它们之间划定界限吗?我害怕一开始就学错了,也没有人来“考验”我。

如有错误,请指正:)

如果两个线程同时在1个CPU核心上运行,它们将进行上下文切换上下文切换基于时间片算法,帮助Scheduler“决定”哪一个以及保持多长时间核心。如果这 2 个线程与这些术语共享相同的变量并不重要,对吧?

但是还有线程干扰。仅当两个线程共享相同的变量时,此术语才成立?

我说的是否正确?

最佳答案

“上下文”,简而言之,是需要加载到程序计数器寄存器、堆栈指针寄存器和 CPU 的其他寄存器中的值的集合,以便启动或恢复线程的执行.

“调度程序”是操作系统的一部分,用于决定哪些线程应在哪些 CPU 上运行以及何时运行。

当调度程序保存一个线程的上下文,并在同一 CPU 上安装其他线程的上下文并让其运行时,我们称之为“上下文切换”。

“抢占”是指当操作系统出于某种原因切换某个线程,而不是对该线程刚刚执行的操作使用react时。

“时间片”是调度程序在抢占每个新(重新)启动的线程以让其他等待线程运行之前授予该线程的时间段。

最后,(我猜)当您读到“干扰”时,它可能指的是一个线程执行的任何操作,由于程序中的某些缺陷,干扰其他一些线程。 (例如,通过更改某些共享变量的值,而另一个线程依赖于该变量不发生更改。)

关于java - 时间片、上下文切换和线程干扰的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63912452/

相关文章:

java - 线程类并将信息传递到主 Activity 类到 TextView 中

linux - perf stat 中针对上下文切换显示的单位的含义是什么?

Java:使用 deriveFont 不会改变字体大小

Java try and catch 直到没有异常抛出

java - 使用 SpringData-MongoDB 将 Java 8 Instant 存储为 BSON 日期

java - Nodejs 性能事件循环

java - 如何在 Java 中按出现顺序对多维数组进行排序?

linux - 线程亲和性与进程亲和性

asp-classic - 经典 asp -- 最好做大量的 response.write 或使用 <%

performance - 无法避免在 CPU 上单独启动的进程的上下文切换