我有一個鏈接,將允許用戶點擊它,它會獲取照片的zip文件。如果該zip文件不存在,則它會啓動一個線程來創建該zip文件,並向用戶顯示一條消息,指出該照片當前正在處理中。ColdFusion性能和鎖定優化
我試圖避免的是用戶反覆點擊鏈接,並設置了大量的線程,將嘗試創建/更新zip文件。壓縮文件處理是相當系統資源密集型的,所以我只想讓應用程序一次生成一個壓縮文件。如果一個人忙於編譯,它應該什麼也不做,並排隊請求。
目前我是怎麼處理它與螺紋圍繞CFLOCK:
<cflock name="createAlbumZip" type="exclusive" timeout="30" throwontimeout="no">
<cfthread action="run" albumId="#arguments.albumId#" name="#CreateUUID()#">
....
什麼我希望在這裏發生(這似乎是工作,如果我測試它)是,它會檢查是否有目前是使用名爲'createAlbumZip'的鎖運行的線程。如果有,它會將請求排隊30秒,之後它應該超時而沒有任何錯誤。如果它無法在30秒內完成創建。
所以 - 這似乎是工作,但我的問題是:這是處理這種情況的最佳方式?鎖定正確的方法?我沒有看到這種方法可能產生的缺點嗎?
因此,如果用戶多次點擊鏈接(比方說100)來生成zip,是不是會創建100個線程,如果是的話,那麼效率如何? – Cheeky 2012-03-09 10:33:13