Re: [閒聊] 遊戲玩太久會卡的原因

作者: kirimaru73 (霧丸)   2024-05-02 12:41:36
用圖書館來比喻電腦/手機程式
儲存空間(硬碟、記憶卡)中的資料就是書架上面的書
如果你有事要在圖書館處理,那這些書中應該會有你需要的資料
但是一般情況下,你沒辦法直接在書架上面看書
所以你會申請一個閱讀用的座位(記憶體)
把你需要的書拿到座位上(把硬碟中的資料移動到記憶體中)
然後就在你的座位上把事情辦完(執行程式)
並在不需要這些資源後把書和座位歸還回去
不過這裡和現實有點差別,儲存空間中的資料其實算是複製一份到記憶體中的
也就是已經被你借到座位上的書,其他人其實也可以借
那我們就假設這些書都是魔法書,你借走之後書架上會自動出現副本好了
反正書架上會發生的事情並不是這個比喻的重點
(你把書隨意塗改害到別人這件事也先不提,這是另外一方面的問題)
如果你要執行的是複雜的大型工作,需要的書可能有上百本
那你就會申請一大片座位,把一大堆接下來可能要用的書都先借過來
某本書你如果剛查閱完,但是在可預見的未來還會使用,你也不會想先還回去
複雜的現代遊戲都是這種規模的工作,才能放入一堆吸引人的要素
再仔細一點來說,整個工作過程應該會像這樣:
(1) 申請一大片相鄰的座位,借一百本書放好,開始工作
(2) 有新的需求,再申請一小片相鄰的座位,借五十本書放好,執行需要的任務
(3) 這三十本書應該不需要了,先把它們還回去,並退掉對應的座位
(4) 又有新的需求,再申請一小片相鄰的座位,借五十本書......
...
(N) 所有任務完成,歸還手上所有的書和座位,離開圖書館
到這裡為止,其實還看不出問題
如果所有程式都都正常地運作,那理應不會有越來越慢的毛病
只是當太多個大型程式一起跑時,會超出整個系統負荷的上限而已
哪些情況會出問題?最常見的就是應該還的書沒有還
前面提過,書架上的書都會自動出現副本,所以不是別人借不到的問題
問題是你把書擺在你申請的座位上,座位上還有東西,無法讓給其他人使用
應該要還的書沒有還的理由可能有這些:
1. 我就是習慣不好,只關心我自己的工作,沒在管應不應該還
2. 我知道要還,我也以為我有還,但是不知為何我沒有還
3. 我因為一些嚴重理由被趕出圖書館了,工作人員不知為何沒有清出我用過的位置
當座位被這些沒有還的書佔據時,前面提過申請「相鄰座位」的行為就會變得困難
如果你真的需要五個座位來工作,正常人都會想要五個位置相鄰吧?
要是圖書館給你安排相差很遠的3+2個座位,你工作又非做不可
那過程想必會十分辛苦,這個概念即使在電子程式中也是相同的
除了工作進行時會累死人以外,光是要把五個座位才夠放的書分散放好就很麻煩了
而複雜的程式中「有新的任務,需要額外申請座位和借書」的次數又相當頻繁
時間一長,再搭配上「為什麼沒有還書」的鬼故事,需要的座位就會越來越分散
而程式又沒有人類的感情,當座位分散到已經無法容忍時,它還是會老實執行任務
所以看似同樣的重複任務,效率就會變得越來越低下
當座位已經確定不夠了,需要這些座位才能運作的程式可能就會崩潰了
然而,經由被拷打的工程師所拷打而成的專業程式,可能會具有比較強的心理素質
即使面對明顯不足的資源,他們仍會被要求用自己的能力極限去完成工作
這時候就會出現各種不可預期的靈異現象,甚至在工作時打翻其他人座位上的咖啡
好,講出問題的原因了,那接下來應該要探討怎麼去解決這個問題
「需要用的書只要用完了就要馬上還」,這是非常合理且容易理解的觀念
任何正經的程式設計課程,以及具一定規模的工程師團隊,都會再三強調這個好習慣
許多企業甚至會要求寫過的程式碼必須讓另一個工程師檢查過
部分明顯的錯誤或是新人的壞習慣,確實用肉眼就可以抓出並要求改正
(這不是理想世界,這是現實,真的有這種機制,而且在大型企業中很常見)
然後為什麼不還書的問題應該已經困擾了人類50年以上,我自己則差不多有15年
明明就是小學生都能理解的好習慣,為什麼一天到晚就有人要違反呢?
作者: farseer7 (FS)   2024-05-02 12:44:00
這篇好好理解
作者: Hosimati (星詠み)   2024-05-02 12:46:00
阿就懶得還呀,搞不好明天就會用到
作者: marx93521 (<阿ㄉ一ㄥˋ>)   2024-05-02 12:47:00
我還了啊 只是不知道為什麼還在位子上
作者: tw15 (巴拉巴拉)   2024-05-02 12:51:00
我要走了 我拿了書 我還了書 櫃檯接過了書 但書還在座位上電子邏輯

Links booklink

Contact Us: admin [ a t ] ucptt.com