在* nix中,是什么导致顶部命令“睡眠”?

是什么导致了我在top看到的这些sleeping过程? 如果我要调用PHP的sleep()函数,是否会增加我在top看到的sleeping计数? sleeping有没有什么缺点?

一个进程在被阻塞时正在休眠,正在等待某个东西。 例如,它可能已经调用了read()并正在等待数据从网络流到达。

sleep()确实是让你的进程睡一会儿的一种方法。 然而,睡眠是除了严重计算的过程之外的正常状态 – 睡眠本质上是一个过程在没有做其他事情时所做的事情。 大部分进程处于正常状态是正常情况 – 如果情况并非如此,则趋向于表明您需要更多的CPU功率。

睡眠过程就像暂停过程。 一个进程睡觉时:

  1. 它正在做一个I / O操作(阻塞I / O)
  2. 当你命令它睡觉睡觉()

任何过程的状态可以是:

  • 就绪:当它准备好执行时,它在队列中等待具有特定优先级的处理器调用
  • 睡眠:在运行时,I / O操作或执行睡眠时被阻塞()
  • 运行:当处理器执行一个进程时,它正在运行。

状态含义

  • R Runnable

  • T停了下来

  • P正在等待Pagein

  • D等待I / O

  • S睡觉<20秒

  • 我空闲 – 睡眠> 20秒

  • Z僵尸或已经失效

它们是现在没有在CPU上运行的进程。 这不一定是坏事。

如果您的进程处于睡眠状态的数量很大(例如,服务器系统上有10,000个),则用于跟踪这些进程的内存量等可能会使系统对非睡眠进程效率较低。

否则,没关系。

大部分普通的服务器系统都有100到1000的时间。 这不是什么大不了的事

仅仅因为他们现在没有做任何事情,并不意味着他们不会很快。 将它们保存在内存中,准备就绪,在需要时减少延迟。

在这里进一步详细说明, S状态表示进程正在等待定时器或慢速设备,而D状态表示正在等待快速设备。

什么构成一个快速的设备还是一个慢速的设备并不是非常明确的定义,但是一般来说,所有的串行,网络和终端设备都是慢速设备,而磁盘是快速设备。