當BEGIN塊中的緩存被使用時,預熱緩存是個好主意嗎?在Perl的BEGIN塊中預熱高速緩存是否是一個好主意?
回答
你並沒有真正提供你所談論的,我認爲這是重要的什麼樣的環境的任何信息。在大多數情況下,答案可能是「否」,但我可以想到一個確定的情況,那就是預先編譯服務器 - Web應用程序等。在這種情況下,您可以在「fork之前」執行的任何工作不僅可以節省讓孩子單獨重新計算相同值的成本,還可以節省內存,因爲包含結果的頁面可以在所有子進程之間共享由操作系統的COW機制。
如果你談論你正在寫一個模塊,而不是一個應用程序,那麼我會說,不,不要擡東西,編譯時未經用戶許可,除非他們的事情,都要做爲模塊工作。相反,請提供preheat_cache
類方法,並且如果調用方有理由在編譯時需要熱緩存,則他們可以將調用本身置於BEGIN
塊中。您也可以使用:preheat_cache
導入標籤,但這在我的書中是不必要的。
如果是在編譯時預先加載緩存,或預加載緩存,你在運行時做的第一件事之間進行選擇,有幾乎沒有差別。
如果你的緩存足夠大,加載它會引發大量的頁面交換的,那是等待,直到運行時的說法。這樣,所有的模塊加載和其他編譯時間代碼都可以在系統負載較輕的情況下完成。
即使我可能是錯的,我也會去「不」。推理是這樣的:保持代碼和它使用的數據很小,以便它在任何緩存中佔用以下的空間(我假設你的意思是CPU緩存,而不是具有常見查詢結果或某些此類事物的編程散列)。
除非你看到某種不好的訪問模式,試圖揣摩需要進行預取了可能是無用的最好的。事實上,這些代碼或初始化數據可能會取代您(或系統上的其他進程)實際使用的某些內容。考慮在代碼的實際工作部分中可以做些什麼來最大化引用的局部性,以便在任何時候儘量保持在較小的內存區域內。
我曾經使用「top」來檢測進程在內存和磁盤之間交換的時間。我還不知道有什麼好的工具可以告訴一個進程緩存未命中的時間,以及進入普通的老式慢速內存。必須有這樣的工具,我只是不知道它們是什麼(軟件工具,而不是一些定製的In Circuit Emulator類型的硬件)。也許這個在當天早些時候的一些想法...
這是標記爲'perl';用戶從硬件抽象出來甚至意識到CPU緩存的存在。 – 2010-02-08 18:53:39
- 1. Perl中BEGIN塊的作用是什麼?
- 2. MSMQ是一個好主意
- 3. Spring Boot Test:每個模塊的Application類是否是一個好主意?
- 4. 緩存結束迭代器 - 好主意還是壞主意?
- 5. 緩存javax.sql.Datasource對象的單個實例是個好主意嗎?
- 6. 檢查高速緩存中是否存在Kerberos票據
- 7. 在自己的主體中測試類是否是一個好主意?
- 8. 是否集中了Android工具欄是一個好主意?
- 9. 什麼是預熱清除緩存?
- 10. 在Javascript中是一個異步類是一個好主意嗎?
- 11. Azure表存儲API高速緩存結果是否存在?
- 12. Perl - 差異BEGIN非BEGIN塊
- 13. 將數據保存在strings.xml中是一個好主意嗎?
- 14. 緩存DataContractSerializer實例是個好主意嗎?
- 15. 將緩存作爲服務提供是個好主意嗎?
- 16. 它是一個很好的做法,高速緩存的多層次對外IDS
- 17. 是否將Viewmodel傳遞給控制器是一個好主意?
- 18. 是否使用Any for Union類型是一個好主意?
- 19. 是否將weak_ptr與unique_ptr配對是一個好主意?
- 20. 是否將SharePoint用作Intranet/Extranet門戶是一個好主意?
- 21. 比較double.MaxValue是否是一個好主意?
- 22. 更新遷移字段是否是一個好主意?
- 23. Perl的BEGIN塊在app.psgi
- 24. 使用C中的宏清除緩衝區是不是一個好主意?
- 25. 正在編寫自定義緩存機制是一個好主意嗎?
- 26. 在Firebase(AngularFire)中存儲HTML,好主意還是壞主意?
- 27. 高速緩存中的全局變量狀態是否正確
- 28. 複製高速緩存中的數據大於一個高速緩存行
- 29. 插入不存在的記錄是不是個好主意?
- 30. 冷緩存和熱緩存概念是什麼意思?
最好在最高溫度200華氏度(約90攝氏度)下預熱緩存,然後在全溫下使用它。如果沒有預熱,高速緩存可能會形成小的微裂縫,從而可能引起腐爛。 : - > – 2010-02-06 06:31:45
更多資訊幫助。 – 2010-02-07 18:02:10