其實問這個問題和這個問題有關聯: 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
或其實我們就活在一個死循環的世界?
事實上你可以自殺來退出循環
不解釋
不要胡思亂想,屁事都扯上哲學是很中二的行為
不要成為民間哲學家