问题
发现用户喜欢用while … sleep…来写Dockerfile的 ENTRYPOINT, 忍不住思考,是tail -f /dev/null
的开销小,还是while true
do
sleep 3
done
更小?
答案
tail -f /dev/null
is better,因为tail -f 会一直等待 I/O 完成,进程一直处于Waiting状态。
而 while 每隔3秒会重新进行一次进程上下文切换,sleep 是单独起1个进程,而sleep结束后,会通过中断通知cpu,通过strace可以跟踪两者的系统调用
1 | #strace tail -f /dev/null |
在 read(4 卡住。。。 因为I/O 无法完成读取/dev/null
1 | # strace -p PID_OF_WHILE_SLEEP_SHELL |