【问题标题】:When should cfthread be used?什么时候应该使用cfthread?
【发布时间】:2011-01-12 02:30:01
【问题描述】:

您能否给出一个需要线程的简单场景? 谢谢, 尼希

【问题讨论】:

    标签: coldfusion coldfusion-8 coldfusion-9


    【解决方案1】:

    我在需要启动一些后端数据处理以在用户执行某些报告之前将数据制成表格的情况下使用它。所以登录后,我们将使用 cfthread 启动一个任务来为用户构建仓库数据。效果很好!

    因此,将 cfthread 视为按需执行异步任务的一种方式。在适当的情况下非常有用!

    【讨论】:

    • 想想“设置它,然后,忘记它!” :)
    【解决方案2】:

    如果有必要与主请求处理代码并行执行某些代码,请使用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>
    

    请记住,有一个设置 CF Admin 可以设置您可以通过这种方式生成的线程数!很多还取决于您的系统资源。

    还有其他示例更详细地描述了其他用例。只需进行谷歌搜索。我推荐 Ben Nadal 的 cfthread primer 作为一个很好的起点。

    另一个警告:线程是所有问题的解决方案!我之前和ran into trouble 使用它们来处理队列处理。

    总之cfthread是ColdFusion的一大特色,尽情享受吧!

    【讨论】:

      【解决方案3】:

      我在两种情况下使用过cfthread。

      如上所述,当我想在我的主线程做其他事情时进行异步处理时,我会使用它。例如,我用它来加载 RSS 数据,同时生成页面的其余部分。由于调用 RSS 源需要几秒钟,所以我在开始任何其他处理之前启动了一个线程。它在我查询、绘制布局等时运行。然后我加入线程并显示 RSS 数据。这使我不必在填充 RSS 时暂停页面加载。

      我使用的第二种方式是使用调度程序的按需替代方案。我们正在生成复杂的 PDF 文档。生成它们的人并不立即需要它们,因此我们创建了一个未连接的线程来处理 PDF,而不是在我们生成文档时让用户卡住。然后,我们限制了任何时候正在处理的 cfthreads 的数量。现在,无论负载如何,cfthread 都会简单地排队,并在资源可用时进行处理。

      【讨论】:

        【解决方案4】:
        <!--- 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>
        

        检查上面的编码。有点清楚了。

        【讨论】:

        • 这不能回答问题。用户想知道何时需要线程(IE:用例),而不是如何使用它。
        猜你喜欢
        • 2023-04-02
        • 2011-04-15
        • 2017-04-10
        • 2012-03-19
        • 2018-05-12
        • 2018-12-11
        • 1970-01-01
        • 2022-09-28
        • 2021-09-07
        相关资源
        最近更新 更多