gpt4 book ai didi

java - 线程池中的时间分片算法

转载 作者:行者123 更新时间:2023-12-03 13:23:21 25 4
gpt4 key购买 nike

首先让我们谈谈原始线程。假设我有4个核心和6个线程。这四个内核将“时间片化”这六个线程。将全部时间都花在这四个核心上。
但是说我有4个线程的固定池,我在其中运行10个线程。我读到它将“查看”这10个线程作为任务。这意味着它不会对10个线程进行时间切片,而是一次运行4个,一旦其中一个完成,就需要另外一个,依此类推。
我有些困惑,为什么在第一种情况下需要时间切片而在第二种情况下却没有时间切片?但是从技术上讲可能存在(比如说我有4个内核,并且有5个线程池与这10个线程一起工作),那么这5个线程将​​在这4个内核中被时间分割。同样在5个线程中,我最多可以同时执行5个任务,直到完成一个任务才可以执行下一个任务。
我写了很多的想法。我在这里说错了吗?有人可以对我如何立即理解而又不加思索地制定基本的经验法则吗?我觉得我缺少基础知识。

最佳答案

在第一种情况下(4个核心和6个线程),将同时运行4个线程。 2个线程将在等待。
例如,如果线程1、2、3、4正在运行,而5、6正在等待,那么一段时间后,线程1、3、5、6正在运行,而2、4正在等待。
这就是时间分割的意思。
在第二种情况下,当您有一个包含4个工作线程的线程池时,同样的事情也会发生。
假设您提交了10个任务(Runnables),那么其中的4个任务肯定会立即运行。 6将在线程池队列中等待。
每当完成任务时,线程就会从队列中拉出另一个任务。
这将一直发生,直到队列中没有剩余的任务为止。
请注意,即使队列中没有任务,这四个工作线程仍处于 Activity 状态,尽管处于 hibernate 状态(操作系统将从其他进程运行线程)。
如果所有任务都是100%受CPU限制的,则此线程池设计会更好,因为如果OS仅具有4个内核,则无论有多少任务待处理,拥有4个以上的线程都是无用的。
通常,在同一系统中运行多个线程效率不高,因为上下文切换既昂贵又缓慢。

关于java - 线程池中的时间分片算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63436154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com