进程、线程、时间片的关系

时间:2022-01-10 09:00:43
1.线程是CPU调度的最小单位,是不是指时间片是按线程分的?
2.如果1的答案为是,那么某个进程有超多的线程,那么这个进程将占据绝大多数CPU时间?
3.如果1的答案为否,那么时间片按进程分,单核多线程速度会比单线程慢呗,因为要线程切换?

10 个解决方案

#1


咱也不知道。。

#2


操作系统书上有

#3


windows 是以线程来分配时间片的。线程,活动时有两个状态,一个是对 cpu 有要求比如SuperPI 的计算过程;一个是在等待消息状态的无要求,其实绝大部分的线程都是这样的状态;所以,一个进程尽管有众多的线程,它所获得的时间片不一定就有多少,这个可在“任务管理器”里看各个进程的状态信息的,同时将进程的线程数和CPU时间打开。

#4


引用 3 楼 zara 的回复:
windows 是以线程来分配时间片的。线程,活动时有两个状态,一个是对 cpu 有要求比如SuperPI 的计算过程;一个是在等待消息状态的无要求,其实绝大部分的线程都是这样的状态;所以,一个进程尽管有众多的线程,它所获得的时间片不一定就有多少,这个可在“任务管理器”里看各个进程的状态信息的,同时将进程的线程数和CPU时间打开。

前几天有事,好久没上论坛了,你的意思是说,线程执行很多时候在等消息、是阻塞的,所以线程多时间片不一定多,因为阻塞直接跳过某些线程执行别的去了?

#5


是这个意思吧。

#6


还有其他因素 如优先级 阻塞,同步 异步等,看看操作系统调度算法

#7


1,进程是资源分配单位,线程是CPU调度单位,对大多数操作系统来说,时间片是线程而非进程相关的;
2,不一定,线程的调度执行是有优先级的,优先级高的得到更多时间片,Linux系统中优先级高的线程时间片大于优先级低的时间片,所以进程有多个线程并不一定这个进程会占用更多CPU时间;
3,这个还是跟优先级有关,如果优先级低,线程再多也不能加快执行速度,即使进程是单线程也是通过操作系统来调度的,也会分配时间片,因为后台还有许多线程在调度执行;但有一点是明确的,线程是对CPU的虚拟,进程有多个线程相当于给该进程分配了多个CPU来执行,效率肯定要高于只分配一个CPU来执行。

#8


第一个问题: 必须是

第二个问题:如果这个进程里的所有线程都是活动的话,那么是的;一般程序里如果经常会用Sleep或者SuspendThread来让一个线程不活动,这样就不会占用CPU时间片

楼主想要了解更详细的原理,可以看《windows核心编程》

#9


1.是
2.是不是占据绝大多CPU时间,还看操作系统调度策略:批处理,那可能是;分时操作,那可能不是,这也还得看其他进程线程比例。还看线程作业情况,比如,该进程(有很多线程)主要进行IO操作,线程一进CPU运行,不久就被挂起,转而去执行其他线程进程,那还是别的进程占据的时间多。
3.假如时间片是按进程来分的,那单核多线程速度会比单线程快!因为线程切换要比进程切换速度要快很多,这正式线程几大优点之一!

多回看几遍书,啊哈哈哈哈。

#10


搜“线程调度 毛德操”

#1


咱也不知道。。

#2


操作系统书上有

#3


windows 是以线程来分配时间片的。线程,活动时有两个状态,一个是对 cpu 有要求比如SuperPI 的计算过程;一个是在等待消息状态的无要求,其实绝大部分的线程都是这样的状态;所以,一个进程尽管有众多的线程,它所获得的时间片不一定就有多少,这个可在“任务管理器”里看各个进程的状态信息的,同时将进程的线程数和CPU时间打开。

#4


引用 3 楼 zara 的回复:
windows 是以线程来分配时间片的。线程,活动时有两个状态,一个是对 cpu 有要求比如SuperPI 的计算过程;一个是在等待消息状态的无要求,其实绝大部分的线程都是这样的状态;所以,一个进程尽管有众多的线程,它所获得的时间片不一定就有多少,这个可在“任务管理器”里看各个进程的状态信息的,同时将进程的线程数和CPU时间打开。

前几天有事,好久没上论坛了,你的意思是说,线程执行很多时候在等消息、是阻塞的,所以线程多时间片不一定多,因为阻塞直接跳过某些线程执行别的去了?

#5


是这个意思吧。

#6


还有其他因素 如优先级 阻塞,同步 异步等,看看操作系统调度算法

#7


1,进程是资源分配单位,线程是CPU调度单位,对大多数操作系统来说,时间片是线程而非进程相关的;
2,不一定,线程的调度执行是有优先级的,优先级高的得到更多时间片,Linux系统中优先级高的线程时间片大于优先级低的时间片,所以进程有多个线程并不一定这个进程会占用更多CPU时间;
3,这个还是跟优先级有关,如果优先级低,线程再多也不能加快执行速度,即使进程是单线程也是通过操作系统来调度的,也会分配时间片,因为后台还有许多线程在调度执行;但有一点是明确的,线程是对CPU的虚拟,进程有多个线程相当于给该进程分配了多个CPU来执行,效率肯定要高于只分配一个CPU来执行。

#8


第一个问题: 必须是

第二个问题:如果这个进程里的所有线程都是活动的话,那么是的;一般程序里如果经常会用Sleep或者SuspendThread来让一个线程不活动,这样就不会占用CPU时间片

楼主想要了解更详细的原理,可以看《windows核心编程》

#9


1.是
2.是不是占据绝大多CPU时间,还看操作系统调度策略:批处理,那可能是;分时操作,那可能不是,这也还得看其他进程线程比例。还看线程作业情况,比如,该进程(有很多线程)主要进行IO操作,线程一进CPU运行,不久就被挂起,转而去执行其他线程进程,那还是别的进程占据的时间多。
3.假如时间片是按进程来分的,那单核多线程速度会比单线程快!因为线程切换要比进程切换速度要快很多,这正式线程几大优点之一!

多回看几遍书,啊哈哈哈哈。

#10


搜“线程调度 毛德操”