Java 线程调度开销和上下文切换

Java 线程调度开销和上下文切换,java,scheduling,context-switch,Java,Scheduling,Context Switch,我只是想澄清我对多线程开销的概念 “虽然目标可能是提高整体性能,但与单线程方法相比,使用多线程总是会带来一些性能成本。这些成本包括与协调 线程(锁定、信令、同步)、增加的上下文切换、线程创建和拆卸以及调度开销。” 为什么他要将上下文切换开销和调度开销分开。线程调度开销是否与上下文切换开销不同。我对这两个概念都感到困惑。简单地说: 上下文切换意味着在进程中,一个线程将进入等待/睡眠状态,另一个线程将进入运行状态,即开始执行。这意味着存储进入等待状态的线程的当前状态,并检索其他线程的当前状态,以

我只是想澄清我对多线程开销的概念


“虽然目标可能是提高整体性能,但与单线程方法相比,使用多线程总是会带来一些性能成本。这些成本包括与协调 线程(锁定、信令、同步)、增加的上下文切换、线程创建和拆卸以及调度开销。”


为什么他要将上下文切换开销和调度开销分开。线程调度开销是否与上下文切换开销不同。我对这两个概念都感到困惑。

简单地说:

上下文切换意味着在进程中,一个线程将进入等待/睡眠状态,另一个线程将进入运行状态,即开始执行。这意味着存储进入等待状态的线程的当前状态,并检索其他线程的当前状态,以便从其进入等待状态的点开始执行相同的线程


调度开销意味着一旦线程进入可运行状态(准备执行),操作系统将重新调度到其中一个处理器以及它可能需要的资源。

“操作系统将重新调度到其中一个处理器”。但这句话和操作系统在一个处理器中恢复上下文是一样的。这是上下文切换,那么区别在哪里呢?假设你已经有线程处于可运行状态,但假设所有处理器都很忙,操作系统不会安排你的线程,因为你的线程已经在运行。现在,如果你的线程进入等待状态,它将恢复当前线程,并将拾取已经在等待队列中的线程并开始执行它。所有这些都将涉及到由于调度线程而最终进行的上下文切换。i、 两者都是相同的。不,它们不是,但你可以说上下文切换是针对一个特定的实例,这意味着它将承担后期调度的成本。