1

ユーザー A は、「thread1」という cfthread を開始します。このスレッドは完了するまでに 30 分かかり、「設定して忘れる」スレッドです。つまり、スレッドはメイン ページの要求に再び参加しません。スレッドには、メモリを大量に消費するルーチンが含まれています。

次に、ユーザー B は同じ名前のスレッド [cfthread という名前が「thread1」です] を起動しますが、別のページ要求から、ユーザー A の 5 分後に起動します。

このシナリオでは、どのようにスレッドをキューに入れて、CF アプリケーション サーバーの処理負荷を軽減できますか?

異なる名前のスレッドによるスレッド キューイングについては理解しています。私は同じスレッドのインスタンスについて話しています。

4

1 に答える 1

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>
于 2015-11-01T21:03:46.887 に答える