首頁  >  問答  >  主體

javascript - 究竟能不能用死循環?還是其實我們活在一個死循環的世界?

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

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

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

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

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

#……

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

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

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

希望大神解惑,^_^

補充:

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

libevent
libev
PCNTL
EventLoop
timerfd
epoll
kqueue
select
poll

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

謝謝!

高洛峰高洛峰2668 天前809

全部回覆(6)我來回復

  • 迷茫

    迷茫2017-05-31 10:36:05

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

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

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


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

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

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


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

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

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

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


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

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

    回覆
    0
  • PHPz

    PHPz2017-05-31 10:36:05

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

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

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

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-31 10:36:05

    究竟能不能用死循環?

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

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


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

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

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

    回覆
    0
  • 黄舟

    黄舟2017-05-31 10:36:05

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

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-31 10:36:05

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

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

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-31 10:36:05

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

    回覆
    0
  • 取消回覆