Когда следует использовать cfthread?
-
10-10-2019 - |
Вопрос
Не могли бы вы дать простой сценарий, где необходимо потоки? Спасибо, Ник
Решение
Я использовал его в ситуации, когда нам нужно было инициировать некоторую обработку данных заднего конец, чтобы табулировать данные до того, как пользователь выполняет некоторые отчеты. Таким образом, после входа в систему мы выполняли задачу, используя CFthread, чтобы создать складские данные для пользователя. Работал отлично!
Так что думайте о CFthread как о способе выполнения асинхронной задачи по требованию. Чрезвычайно полезен в правильной ситуации!
Другие советы
Использовать cfthread
Если имеет смысл выполнить определенный код параллельно с основным кодом обработки запросов.
Пример: скажем, вы загружаете каталог файлов, и вам необходимо выполнить одинаковую обработку для каждого, возможно, чтобы сохранить содержимое в базе данных. Затем вы можете использовать cfthread
запустить обработку на каждом файле асинхронно. Рассмотрим этот псевдокод:
<cfdirectory directory="x" action="read" name="allFiles" />
<cfloop query="allFiles">
<cfthread action="run" name="thread-#allFiles.name#>
<!--- Read your file in and do processing --->
</cfthread>
</cfloop>
Помните, что есть настройка администратора CF, чтобы установить количество потоков, которые вы можете появиться таким образом! Многое также будет зависеть от ваших системных ресурсов.
Существуют и другие примеры, которые описывают другие варианты использования более подробно. Просто сделайте поиск в Google. Я бы порекомендовал Бена Надаля Cfthread Primer как хорошая отправная точка.
Еще одно предупреждение: потоки - это решение всех проблем! Я использовал их, чтобы справиться с обработкой очередей раньше и столкнулся с неприятностями.
В итоге cfthread
Это отличная особенность Coldfusion, наслаждайтесь этим!
Я использовал cfthread в двух ситуациях.
Как отмечалось выше, я использовал его, когда хотел сделать асинхронную обработку, в то время как моя главная тема делала другие вещи. Например, я использовал его для загрузки данных RSS при генерации остальной части страницы. Поскольку призыв к источнику RSS занял пару секунд, я запустил ветку, прежде чем начать любую другую обработку. Он работал, когда я запрашивал, рисовал макет и т. Д. Затем я присоединился к потоке и отображал данные RSS. Это помешало мне сделать паузу загрузки страницы, пока RSS заполнял.
Второй способ, которым я использовал это,-это своего рода альтернатива по использованию планировщика. Мы генерировали сложные документы PDF. Человек, генерирующий их, не нуждался в них сразу, поэтому вместо того, чтобы застрять пользователь, пока мы сгенерировали документ, мы создали неуместный поток для обработки PDF. Затем мы ограничили количество обработанных CFthreads в любой Ppoint. Теперь, независимо от нагрузки, CFthreads просто встали в очередь и будут обрабатываться в качестве ресурсов.
<!--- store value into message varaible --->
<cfset variables.message = "It's orginal value.">
<!--- create new thread --->
<cfthread name="ThreadOne">
<!--- overwrite new value into existing variable. --->
<cfset variables.message = "It comes from thread.">
</cfthread>
<!--- join thread --->
<!---
If we leave this join, the code within thread will execute but won't display the value.
--->
<cfthread action="join" name="ThreadOne" />
<!--- Output --->
<cfoutput>#variables.message#</cfoutput>
Проверьте выше кодирование. Это довольно ясно.