用户A会触发名为' thread1'的cfthread。这个帖子需要30分钟才能完成,并且是一个'设置&忘了'线。换句话说,线程不与主页面请求连接。该线程包含高度内存密集的例程。
用户B然后触发相同的命名线程[cfthread,其名称为' thread1'],但是来自不同的页面请求,在用户A后5分钟。
在这种情况下,我如何对线程进行排队,以便减少CF应用服务器上的处理负载?
请注意,我了解有关具有不同名称的线程的线程排队。我在谈论同一个线程的实例。
答案 0 :(得分:1)
答案是锁定cfthread标记内的函数调用。这是一个例子:
<cfthread action="run" name="thread1">
<cflock name="threadlock" type="exclusive" timeout="10000">
<cfset callToSomeFunction()>
</cflock>
</cfthread>
因此,要测试它,请将下面的代码复制到.cfm模板中。打开Firefox,打开Chrome。然后在Firefox中测试模板。等待5秒钟,然后在Chrome中测试模板:
<cfthread action="run" name="thread1">
<cfset tickstart = GetTickCount()>
<cfset time = StructNew()>
<cfset time.timestart = DateFormat(now(),'dd-mm-yy') & " " & TimeFormat(now(),'hh-mm-ss')>
<cflock name="threadlock" type="exclusive" timeout="10000">
<cfthread action="sleep" duration="#(10 * 1000)#" />
</cflock>
<cfset tickend = GetTickCount()>
<cfset tick = tickend - tickstart>
<cfset time.tick = tick/1000>
<cfset time.timeend = DateFormat(now(),'dd-mm-yy') & " " & TimeFormat(now(),'hh-mm-ss')>
<cfdump var="#time#" format="html" metainfo="no" output="somefilepath\#thread1.name#-#DateFormat(now(),'dd-mm-yy')#-#TimeFormat(now(),'hh-mm-ss')#.htm" />
</cfthread>