javascript - 究竟能不能用死循環?還是其實我們活在一個死循環的世界?
高洛峰
高洛峰 2017-05-31 10:34:05
0
6
847

其實問這個問題和這個問題有關聯: PHP定時通知、準時發布怎麼做?

以前老師總是說,寫程式碼千萬不要寫出死循環,這是最大的BUG,這個觀念一直在腦子裡面根深蒂固了,所以看到各種死循環就各種鄙視,各種糾結。

可我發現其實很多的東西用的就是死循環:

  1. php-resque 裡面就是死循環,看到那裡我瞬間沒了好感

  2. #看了瀏覽器的工作原理,JS事件循環其實也是個死循環,內核程式碼C 吧好像就是死循環

#……

我不知道還有多少東西是死循環

是不是我們電腦從開機後就一直是個死循環啊,CPU是不是就是死循環在那裡一直工作啊?請大神解惑一下,搞得我現在好糾結,如果不死循環,我們的程式碼其實就是死的,網站沒人訪問就是死的。那些什麼事件/訊號來了就會觸發回調,是怎麼實現的呢,也是死循環嗎?

或是我們人就是個死循環,再不斷的接受訊息,然後作出回饋,不然你喊我,我能立即回答,你真以為是你通知我了嗎,是你擁有回調我的能力嗎?搞笑!是我一直在監聽著好嗎?

希望大神解惑,^_^

補充:

我在看這些資料的時候,常常看到這些字:

libevent
libev
PCNTL
EventLoop
timerfd
epoll
kqueue
select
poll

求大神解惑一下,我該去看點什麼資料,找點什麼書看看,《Linux/UNIX網絡編程》

謝謝!

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(6)
迷茫

是不是我們電腦從開機後就一直是個死循環啊,CPU是不是就是死循環在那裡一直工作啊?

持續工作就是死循環嗎,OS會把CPU運行時間分片,配分給不同進程,每隔一會OS會收回控制權,然後再派出去,就這樣循環。

但是這個循環不是死的,你可以點擊 關機 來結束這個循環。


那些什麼事件/訊號來了就會觸發回調,是怎麼實現的呢,也是死循環嗎?

是的,Eventloop需要持續的監聽,這種監聽只能透過這種方式實現,而我們看到的就是 事件發生 => 執行回調 這樣自然的事情了,這是一種抽象。

但是也不是死的,你可以關閉瀏覽器來結束這個循環。


或我們人就是個死循環,再不斷的接受訊息,然後作出回饋,不然你喊我,我能立即回答,你真以為是你通知我了嗎,是你擁有回調我的能力嗎?搞笑!是我一直在監聽著好嗎?

我認為人更像是一台狀態機(FSM),而不是什麼死循環。

根據輸入改變狀態,從而輸出值(人的對話)

我不知道人腦是不是順序執行指令的,但是人能處理邊界模糊的事情,比如開車,做飯,各種語言的聽說讀寫等等,人能隨時從某個思考中抽出來去想另外一件事,換言之充斥著大量中斷訊號,或許不存在死循環這種事,因為可以隨時ban掉。


求大神解惑一下,我應該去看點什麼資料,找點什麼書看看

看看電腦組成和作業系統的原理和實作如何?

PHPzhong

《Ruby元程式設計》裡的一句話說的很好,我覺得放到這裡很適合

根本沒有什麼元編程,從來只有編程而已。

我認為死循環也是一樣,存在即為合理,只是看你如何去用而已,在沒有更好的解決方案的時候,解決問題很重要,在有更好的解決方案的時候,代碼優雅同樣重要,根本就沒有什麼死循環,從來只有循環而已。

给我你的怀抱

究竟能不能用死循環?

死循環 != 無限循環 != 空循環

死循環,是bug,會導致卡死
無限循環,例如:事件循環
空循環,例如:spin wait


或其實我們就活在一個死循環的世界?

事實上你可以自殺來退出循環

不解釋
不要胡思亂想,屁事都扯上哲學是很中二的行為
不要成為民間哲學家

黄舟

寫過單晶片代碼嗎?
就是while(1)
退出靠斷電或中斷
還有看門狗(watch dog)

phpcn_u1582

可以認為作業系統就是個死循環

這個問題太宏大,不好解釋

但你學編程,還是要盡量避免不必要的死循環。程序有始有終,思緒清晰最好。

巴扎黑

死循環不如說元循環和其他循環一樣有始有終,只不過其他循環是元循環的一段,走過就沒了,死循環走過了回到了原點。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!