java ,多个线程为什么要 “抢夺”cpu的执行权 ? 比如有4个 thread 线程,然后cpu也是4核 , 那不就是刚好 一个核对应一个线程吗 , 就不用抢夺了呀 ?

java ,多个线程为什么要 “抢夺”cpu的执行权 ? 比如有4个 thread 线程,然后cpu也是4核 , 那不就是刚好 一个核对应一个线程吗 , 就不用抢夺了呀 ?


回答:

那要是再多怎么怎么办


回答:

1、首先要区分CPU是多处理器架构,还是多核心架构 这是两种不同的处理器架构
多处理器架构是指多个cpu核心分别有自己的一套Cache和MMU
多核心架构是指多个cpu核心共用一套Cache和MMU
多处理器架构可以并行 多核心架构只能并发
现代的CPU基本上都实现了多处理器架构,所以可以实现并行
你可以看一下这篇回答里用户“勇往直前”的回答[https://www.zhihu.com/question/271821176]
这个回答引用了哈工大李治军的《操作系统》
2、你说的线程“抢夺”cpu的执行权,一般是指多个线程被操作系统分配到同一个cpu核心上执行的情况,而不是你说的这种线程在同一数量cpu核心数的前提下执行任务的情况,操作系统肯定是优先把能用的cpu资源分配给能够应付的线程的,能均分更好(也就是说如果按你题目的假设来说,你的说法是正确的)。如果一直让一个线程霸占着核心直到它做完任务为止,一是资源浪费 二是有可能这个线程会陷入死循环 系统会出现假死的情况 所以现代操作系统一般使用时间片轮转调度算法,也就是隔一段时间就切换一个进程来执行任务 这个进程里的线程之间就可能存在竞争所在进程资源的情况(它们之间同样使用时间片轮转调度算法来进行切换,事实上在类Unix操作系统比如Linux里,进程和线程之间的界限被模糊了,它们都是“任务”),同一时间一个cpu核心只能执行一个线程的任务,剩下的线程在当前执行的线程的时间片执行完后当然就要去抢夺cpu的执行权了,但是最终谁能抢到执行权就不一定了,线程之间是共享进程的资源的,对于它们自己而言只想赶紧拿到资源完成自己的任务,自然就要打架来获得执行权了。


回答:

抢占式调度是一种比较常见的多任务调度方式,因为这种方式具有灵活性和高效性。

如果采用不抢占式的方式,当一个线程开始执行时,它将一直执行直到自己主动让出 CPU 的执行权,或者执行完任务并结束。此时,其他线程就只能等待当前线程执行完后才能获得 CPU 的执行权,这就会导致其他线程响应时间延长、CPU 资源利用率低下、性能下降等问题。另外,线程自行让出 CPU 的执行权也存在问题,因为线程的执行时间片无法精确控制,而且线程之间的优先级、负载和资源占用等情况不容易准确确定,可能会导致死锁、饥饿等问题。

相比之下,抢占式调度可以更加灵活和高效地利用 CPU 资源。通过时间片轮转、优先级调度等方式,可以保证所有线程都能够公平地竞争 CPU 的执行权,并且能够及时地切换到其他线程进行执行。这样,就可以避免线程之间出现长时间阻塞、响应延迟等问题,提高系统的并发性和资源利用率。因此,抢占式调度在实际应用中被广泛采用。


回答:

你看,一个简单的Web项目。活动线程33,守护线程26。


在看

public static void main(String[] args) throws InterruptedException {

while (true) {

TimeUnit.MINUTES.sleep(10);

}

}


另外,你这机器不止运行Java程序。还有OS本身


回答:

1.
这是因为线程执行的时候可能会被打断,比如时间片用完或者等待I/O操作,还有可能会有更多的线程被创建并且要求使用CPU执行。


回答:


光System线程就用200多个,随便打开几个软件就几百个线程


回答:

首先得知道什么是线程什么是进程,进程是运行到核心上的任务,而线程是在进程中的小任务,而你的系统里有N个进程,有N * M 个线程,进程线程同时运行的话,你的核心就不太够了


回答:

即使有多个核心也并不意味着每个线程都能独占一个核心。例如,在某些情况下,一个或多个线程可能无法使用其所在的核心,例如当该核心由其他进程或线程独占时或因 CPU 调度算法而未被分配给特定的线程时。

此外,即使在程序中硬编码指定了将线程分配到特定的 CPU 核心,任何一种形式的并发都可能导致数据竞争和死锁等问题,需要进行适当的同步和协调机制来避免。

因此,即使一个系统有多个 CPU 核心,多个线程仍然需要通过竞争来获取 CPU 执行时间,以便分配给它们执行任务的时间片,从而实现并发执行。

以上是 java ,多个线程为什么要 “抢夺”cpu的执行权 ? 比如有4个 thread 线程,然后cpu也是4核 , 那不就是刚好 一个核对应一个线程吗 , 就不用抢夺了呀 ? 的全部内容, 来源链接: utcz.com/p/945302.html

回到顶部