其实问这个问题和这个问题有关联: PHP定时通知、按时发布怎么做?
以前老师总是说,写代码千万不要写出死循环,这是最大的BUG,这个观念一直在脑子里面根深蒂固了,所以看到各种死循环就各种鄙视,各种纠结。
可我发现其实很多的东西用的就是死循环:
php-resque 里面就是死循环,看到那里我瞬间没了好感
看了浏览器的工作原理,JS事件循环其实也是个死循环,内核代码C++吧好像就是死循环
……
我不知道还有多少东西是死循环
是不是我们电脑从开机后就一直是个死循环啊,CPU是不是就是死循环在那儿一直工作啊?请大神解惑一下,搞得我现在好纠结,如果不死循环,我们的代码其实就是死的,网站没人访问就是死的。那些什么事件/信号来了就会触发回调,是怎么实现的呢,也是死循环吗?
或者我们人就是个死循环,再不断的接受信息,然后作出反馈,不然你喊我,我能立即回答,你真以为是你通知我了吗,是你拥有回调我的能力吗?搞笑!是我一直在监听着好吗?
希望大神解惑,^_^
补充:
我在看这些资料的时候,经常看到这些词:
libevent
libev
PCNTL
EventLoop
timerfd
epoll
kqueue
select
poll
求大神解惑一下,我应该去看点什么资料,找点什么书看看,《Linux/UNIX网络编程》
谢谢!
迷茫2017-05-31 10:36:05
是不是我们电脑从开机后就一直是个死循环啊,CPU是不是就是死循环在那儿一直工作啊?
持续工作就是死循环吗,OS会把CPU运行时间分片,配分给不同进程,每隔一会OS会收回控制权,然后再派出去,就这样循环。
但是这个循环不是死的,你可以通过点击 关机
来结束这个循环。
那些什么事件/信号来了就会触发回调,是怎么实现的呢,也是死循环吗?
是的,Eventloop需要持续的监听,这种监听只能通过这种方式实现,而我们看到的就是 事件发生
=> 执行回调
这样自然的事情了,这是一种抽象。
但是也不是死的,你可以关闭浏览器来结束这个循环。
或者我们人就是个死循环,再不断的接受信息,然后作出反馈,不然你喊我,我能立即回答,你真以为是你通知我了吗,是你拥有回调我的能力吗?搞笑!是我一直在监听着好吗?
我认为人更像是一台状态机(FSM),而不是什么死循环。
根据输入改变状态,从而输出值(人的对话)
我不知道人脑是不是顺序执行指令的,但是人能处理边界模糊的事情,比如开车,做饭,各种语言的听说读写等等,人能随时从某个思考中抽出来去想另外一件事,换言之充斥着大量中断信号,或许不存在死循环这种事,因为可以随时ban掉。
求大神解惑一下,我应该去看点什么资料,找点什么书看看
看看计算机组成和操作系统的原理和实现如何?
PHPz2017-05-31 10:36:05
《Ruby元编程》里的一句话说的很好,我感觉放到这里很合适
根本没有什么元编程,从来只有编程而已。
我认为死循环也是一样,存在即为合理,只是看你如何去用而已,在没有更好的解决方案的时候,解决问题很重要,在有更好的解决方案的时候,代码优雅同样重要,根本就没有什么死循环,从来只有循环而已。
给我你的怀抱2017-05-31 10:36:05
究竟能不能用死循环?
死循环,是bug,会导致卡死
无限循环,比如:事件循环
空循环,比如:spin wait
或者其实我们就活在一个死循环的世界中?
事实上你可以自杀来退出循环
不解释
不要胡思乱想,屁事都扯上哲学是很中二的行为
不要成为民间哲学家