2011-01-12 90 views

回答

4

我在需要启动一些后端数据处理以在用户执行某些报告之前列表数据的情况下使用它。因此,登录后,我们将使用cfthread启动任务以为用户构建仓库数据。工作很棒!

所以想想cfthread是一种按需执行异步任务的方法。在正确的情况下非常有用!

+1

认为“设置它,并忘记它!” :) – 2011-01-12 16:33:06

3

如果与主请求处理代码并行地执行某些代码是有意义的,则使用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管理员设置,你可以通过这种方式生成线程的数量!很多也将取决于您的系统资源。

还有其他一些例子更详细地描述了其他用例。只要做一个谷歌搜索。我推荐Ben Nadal的cfthread primer作为一个很好的起点。

另一个警告:线程是解决所有问题的方法!我在使用它们来处理队列处理之前和ran into trouble

综述cfthread是ColdFusion的强大功能,喜欢它!

-1
<!--- 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> 

检查上面的编码。这很清楚。

+1

这不回答这个问题。用户想知道何时需要线程(IE:用例),而不是如何使用它。 – 2011-01-12 14:07:06

3

我在两种情况下使用了cfthread。

如上所述,我使用它时,我想做异步处理,而我的主线程正在做其他事情。例如,我使用它来加载RSS数据,同时生成页面的其余部分。由于对RSS源的调用需要几秒钟,所以我在开始任何其他处理之前启动了一个线程。它在查询时绘制布局等运行,然后我加入线程并显示RSS数据。这阻止了我在RSS填充时不得不暂停页面加载。

我使用过的第二种方法是使用调度程序的一种按需替代方法。我们正在生成复杂的PDF文档。生成它们的人不需要马上使用它们,所以我们创建了一个未连接的线程来处理PDF,而不是让用户在生成文档时卡住。然后,我们限制任何ppoint中正在处理的cfthread的数量。现在,无论负载如何,cfthread都会简单排队,并在资源可用时进行处理。

相关问题