Вопрос

Не могли бы вы дать простой сценарий, где необходимо потоки? Спасибо, Ник

Это было полезно?

Решение

Я использовал его в ситуации, когда нам нужно было инициировать некоторую обработку данных заднего конец, чтобы табулировать данные до того, как пользователь выполняет некоторые отчеты. Таким образом, после входа в систему мы выполняли задачу, используя 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>

Проверьте выше кодирование. Это довольно ясно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top