请您提供一个需要线程的简单方案吗? 谢谢, NICH
答案 0 :(得分:4)
我在需要启动一些后端数据处理以在用户执行某些报告之前将数据制成表格的情况下使用它。因此,在登录后,我们将使用cfthread启动任务,为用户构建仓库数据。工作得很好!
因此,将cfthread视为按需执行异步任务的一种方式。在正确的情况下非常有用!
答案 1 :(得分: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的一个很棒的功能,享受吧!
答案 2 :(得分:3)
我在两种情况下使用过cfthread。
如上所述,当我想要进行异步处理时,我已经使用过它,而我的主要线程正在做其他事情。例如,我用它来加载RSS数据,同时生成页面的其余部分。由于对RSS源的调用花了几秒钟,我在开始任何其他处理之前就开始了一个线程。它在我查询,绘制布局等时运行。然后我加入了线程并显示了RSS数据。这使我无法在填充RSS时暂停页面加载。
我使用它的第二种方式是使用调度程序的按需替代方法。我们正在生成复杂的PDF文档。生成它们的人不需要立即使用它们,因此我们创建了一个未连接的线程来处理PDF,而不是让用户在生成文档时卡住。然后,我们限制在任何ppoint处理的cfthreads的数量。现在,无论负载如何,cfthreads都会排队,并在资源可用时进行处理。
答案 3 :(得分:-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>
检查以上编码。这有点清楚。