我可以在多用户环境中将具有相同名称的cfthread排队吗?

时间:2015-11-01 13:18:22

标签: coldfusion cfthread

用户A会触发名为' thread1'的cfthread。这个帖子需要30分钟才能完成,并且是一个'设置&忘了'线。换句话说,线程不与主页面请求连接。该线程包含高度内存密集的例程。

用户B然后触发相同的命名线程[cfthread,其名称为' thread1'],但是来自不同的页面请求,在用户A后5分钟。

在这种情况下,我如何对线程进行排队,以便减少CF应用服务器上的处理负载?

请注意,我了解有关具有不同名称的线程的线程排队。我在谈论同一个线程的实例。

1 个答案:

答案 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>