スレッド化が必要な簡単なシナリオを教えてください。ありがとう、ニッチ
4 に答える
ユーザーがレポートを実行する前に、バックエンドのデータ処理を開始してデータを集計する必要がある状況で使用しました。したがって、ログイン後、cfthreadを使用してタスクを起動し、ユーザーのウェアハウスデータを構築します。うまくいきました!
したがって、cfthreadは、オンデマンドで非同期タスクを実行する方法と考えてください。適切な状況で非常に役立ちます!
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>
この方法で生成できるスレッドの数を設定するための設定CFAdminがあることを忘れないでください!多くはシステムリソースにも依存します。
他のユースケースをより詳細に説明する他の例があります。Google検索をするだけです。出発点として、 BenNadalのcfthread入門書をお勧めします。
もう1つの警告:スレッドはすべての問題の解決策です!以前はキュー処理を処理するためにそれらを使用していて、問題が発生しました。
要約cfthread
すると、ColdFusionの優れた機能です。お楽しみください。
私は2つの状況でcfthreadを使用しました。
上記のように、メインスレッドが他のことをしているときに非同期処理をしたいときに使用しました。たとえば、ページの残りの部分を生成しながらRSSデータをロードするために使用しました。RSSソースの呼び出しには数秒かかったので、他の処理を開始する前にスレッドを開始しました。クエリやレイアウトの描画などで実行されました。その後、スレッドに参加してRSSデータを表示しました。これにより、RSSの入力中にページの読み込みを一時停止する必要がなくなりました。
私がこれを使用した2番目の方法は、スケジューラーを使用する代わりのオンデマンドの代替手段です。複雑なPDFドキュメントを生成していました。それらを生成する人はすぐにそれらを必要としなかったので、ドキュメントの生成中にユーザーをスタックさせるのではなく、PDFを処理するための結合されていないスレッドを作成しました。次に、任意の時点で処理されるcfthreadの数を制限しました。これで、負荷に関係なく、cfthreadsは単にキューに入れられ、リソースが使用可能になったときに処理されます。
<!--- 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>
上記のコーディングを確認してください。それはちょっと明確です。