【linux】究竟能不能用死循环?或者其实我们就活在一个死循环的世界中?

其实问这个问题和这个问题有关联: PHP定时通知、按时发布怎么做?

以前老师总是说,写代码千万不要写出死循环,这是最大的BUG,这个观念一直在脑子里面根深蒂固了,所以看到各种死循环就各种鄙视,各种纠结。

可我发现其实很多的东西用的就是死循环:

  1. php-resque 里面就是死循环,看到那里我瞬间没了好感

  2. 看了浏览器的工作原理,JS事件循环其实也是个死循环,内核代码C++吧好像就是死循环

【linux】究竟能不能用死循环?或者其实我们就活在一个死循环的世界中?

……

我不知道还有多少东西是死循环

是不是我们电脑从开机后就一直是个死循环啊,CPU是不是就是死循环在那儿一直工作啊?请大神解惑一下,搞得我现在好纠结,如果不死循环,我们的代码其实就是死的,网站没人访问就是死的。那些什么事件/信号来了就会触发回调,是怎么实现的呢,也是死循环吗?

或者我们人就是个死循环,再不断的接受信息,然后作出反馈,不然你喊我,我能立即回答,你真以为是你通知我了吗,是你拥有回调我的能力吗?搞笑!是我一直在监听着好吗?

希望大神解惑,^_^

补充:

我在看这些资料的时候,经常看到这些词:

libevent
libev
PCNTL
EventLoop
timerfd
epoll
kqueue
select
poll

求大神解惑一下,我应该去看点什么资料,找点什么书看看,《Linux/UNIX网络编程》

谢谢!

回答

是不是我们电脑从开机后就一直是个死循环啊,CPU是不是就是死循环在那儿一直工作啊?

持续工作就是死循环吗,OS会把CPU运行时间分片,配分给不同进程,每隔一会OS会收回控制权,然后再派出去,就这样循环。

但是这个循环不是死的,你可以通过点击 关机 来结束这个循环。


那些什么事件/信号来了就会触发回调,是怎么实现的呢,也是死循环吗?

是的,Eventloop需要持续的监听,这种监听只能通过这种方式实现,而我们看到的就是 事件发生 => 执行回调 这样自然的事情了,这是一种抽象。

但是也不是死的,你可以关闭浏览器来结束这个循环。


或者我们人就是个死循环,再不断的接受信息,然后作出反馈,不然你喊我,我能立即回答,你真以为是你通知我了吗,是你拥有回调我的能力吗?搞笑!是我一直在监听着好吗?

我认为人更像是一台状态机(FSM),而不是什么死循环。

根据输入改变状态,从而输出值(人的对话)

我不知道人脑是不是顺序执行指令的,但是人能处理边界模糊的事情,比如开车,做饭,各种语言的听说读写等等,人能随时从某个思考中抽出来去想另外一件事,换言之充斥着大量中断信号,或许不存在死循环这种事,因为可以随时ban掉。


求大神解惑一下,我应该去看点什么资料,找点什么书看看

看看计算机组成和操作系统的原理和实现如何?

究竟能不能用死循环?

死循环 != 无限循环 != 空循环

死循环,是bug,会导致卡死
无限循环,比如:事件循环
空循环,比如:spin wait


或者其实我们就活在一个死循环的世界中?

事实上你可以自杀来退出循环

不解释
不要胡思乱想,屁事都扯上哲学是很中二的行为
不要成为民间哲学家

《Ruby元编程》里的一句话说的很好,我感觉放到这里很合适

根本没有什么元编程,从来只有编程而已。

我认为死循环也是一样,存在即为合理,只是看你如何去用而已,在没有更好的解决方案的时候,解决问题很重要,在有更好的解决方案的时候,代码优雅同样重要,根本就没有什么死循环,从来只有循环而已。

死循环不如说元循环和其他循环一样有始有终,只不过其他循环是元循环的一段,走过就没了,死循环走过了回到了原点。

写过单片机代码吗?
就是while(1)
退出靠断电或者中断
还有看门狗(watch dog)

可以认为操作系统就是个死循环

这个问题太宏大,不好解释

但你学编程,还是要尽量避免不必要的死循环。程序有始有终,思路清晰最好。

以上是 【linux】究竟能不能用死循环?或者其实我们就活在一个死循环的世界中? 的全部内容, 来源链接: utcz.com/a/86643.html

回到顶部