等待线程可以睡觉吗?

时间:2014-08-29 08:02:43

标签: c linux multithreading pthreads scheduled-tasks

这个问题与linux调度和处理器活动有关,线程中的不同阶段可能正在做某事,或者闲置/等待或者可能正在休眠。当线程正在主动做某事时,处理器将执行指令(并且处理器吞吐量,即它每秒执行的指令没有)将是高的。我的任务是处理器在线程等待和休眠时的行为(可能大致)?等待线程可以睡觉吗?线程处于休眠状态时,是否意味着处理器处于空闲状态?当处理器空闲时,是否意味着所有线程都处于休眠状态?当处理器处于空闲状态时,Linux是否真的将处理器置于一种模式,使其不执行任何指令(即时钟门控)?

1 个答案:

答案 0 :(得分:0)

当线程正在休眠时,操作系统实际上等待将其放入执行队列。当线程要求OS在一段时间内中断线程本身时,就会发生休眠。通常使用sleep()函数来实现。操作系统将线程从执行队列中删除所请求的时间,当它结束时,它继续运行线程。其他I / O函数的作用方式类似:如果线程调用read(),操作系统将从执行队列中删除线程,直到读取资源中的数据为止。

另一方面,当处理器没有运行代码或任何硬件事件时,处理器空闲。空闲状态是硬件状态:CPU没有运行代码,只是等待某个事件发生(即:调度定时器或I / O中断),它指示处理器运行代码。 8086处理器可以通过执行HLT(暂停)指令来实现空闲状态。运行HLT后,处理器停止运行代码,直到收到硬件中断(如上面列出的那样)。