У меня есть ссылка, которая позволит пользователям нажимать на нее, и она извлекает zip-файл с фотографиями. Если zip-файл не существует, он затем запускает поток для создания zip-сообщения и отображает сообщение пользователю, что фотографии в настоящее время обрабатываются.Оптимизация производительности и блокировки ColdFusion
То, что я пытаюсь избежать, - это повторный щелчок по ссылке и выделение цельной массы потоков, которые будут пытаться создать/обновить zip-файл. Обработка zip-файла является довольно интенсивным системным ресурсом, поэтому я хочу только, чтобы приложение могло генерировать по одному 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