作为多线程
的初学者,我对这些术语有点困惑。有人可以帮我在它们之间划定界限吗?我害怕一开始就学错了,也没有人来“考验”我。
如有错误,请指正:)
如果两个线程同时在1个CPU核心上运行,它们将进行上下文切换
。 上下文切换
基于时间片算法
,帮助Scheduler
“决定”哪一个以及保持多长时间核心。如果这 2 个线程与这些术语共享相同的变量并不重要,对吧?
但是还有线程干扰
。仅当两个线程共享相同的变量时,此术语才成立?
我说的是否正确?
最佳答案
“上下文”,简而言之,是需要加载到程序计数器寄存器、堆栈指针寄存器和 CPU 的其他寄存器中的值的集合,以便启动或恢复线程的执行.
“调度程序”是操作系统的一部分,用于决定哪些线程应在哪些 CPU 上运行以及何时运行。
当调度程序保存一个线程的上下文,并在同一 CPU 上安装其他线程的上下文并让其运行时,我们称之为“上下文切换”。
“抢占”是指当操作系统出于某种原因切换某个线程,而不是对该线程刚刚执行的操作使用react时。
“时间片”是调度程序在抢占每个新(重新)启动的线程以让其他等待线程运行之前授予该线程的时间段。
最后,(我猜)当您读到“干扰”时,它可能指的是一个线程执行的任何操作,由于程序中的某些缺陷,干扰其他一些线程。 (例如,通过更改某些共享变量的值,而另一个线程依赖于该变量不发生更改。)
关于java - 时间片、上下文切换和线程干扰的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63912452/