2011-01-12 3 views

答えて

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> 

このようにして生成できるスレッドの数を設定することを覚えておいてください。ロットはシステムリソースにも依存します。

他の使用例について詳しく説明する他の例があります。ちょうどGoogleの検索を行います。ベン・ナダルの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:ユースケース)が必要なときにそれを使用する方法を知りたがっていました。 –

3

私はcfthreadを2つの状況で使用しました。

私が主なスレッドが他のことをやっている間に非同期処理をしたいときに使用しました。たとえば、残りのページを生成しながらRSSデータを読み込むために使用しました。 RSSソースへの呼び出しには数秒かかりましたので、他の処理を開始する前にスレッドを開始しました。私が質問したり、レイアウトを描いたりしている間に走った。それからスレッドに加わり、RSSデータを表示した。これにより、RSSが投入されている間にページの読み込みを一時停止する必要がなくなりました。

私がこれを使用した2番目の方法は、スケジューラを使用する代わりにオンデマンドの方法です。私たちは複雑なPDF文書を生成していました。それらを生成する人はすぐにそれらを必要としなかったので、私たちが文書を生成している間にユーザーが立ち往生するのではなく、PDFを処理するために結合されていないスレッドを作成しました。次に、処理されるcfthreadの数を任意のppointに制限しました。現在、負荷に関係なく、cfthreadsはキューに入れられ、リソースが利用可能になると処理されます。