Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading ParallelFor中包含的WF序列中的所有活动都应该是AsyncCodeActivity吗?_Multithreading_Workflow Foundation 4 - Fatal编程技术网

Multithreading ParallelFor中包含的WF序列中的所有活动都应该是AsyncCodeActivity吗?

Multithreading ParallelFor中包含的WF序列中的所有活动都应该是AsyncCodeActivity吗?,multithreading,workflow-foundation-4,Multithreading,Workflow Foundation 4,AI有一个WF 4应用程序,其中包含一个序列工作流,该工作流具有一个用于包含具有三个序列活动的序列的并行程序。 其中第一个活动是绑定计算的(它生成证书签名请求),第二个是绑定IO的(它发送电子邮件),第三个任务也是绑定IO的(它更新数据库) 我最初将这些都开发为CodeActivities,并看到它们需要是AsyncCodeActivities才能真正在多线程模式下运行。因此,我将第一个绑定到计算的活动修改为AsyncCodeActivity,我可以看到它是多线程执行的。(至少我可以在我的开发机

AI有一个WF 4应用程序,其中包含一个序列工作流,该工作流具有一个用于包含具有三个序列活动的序列的并行程序。 其中第一个活动是绑定计算的(它生成证书签名请求),第二个是绑定IO的(它发送电子邮件),第三个任务也是绑定IO的(它更新数据库)

我最初将这些都开发为CodeActivities,并看到它们需要是AsyncCodeActivities才能真正在多线程模式下运行。因此,我将第一个绑定到计算的活动修改为AsyncCodeActivity,我可以看到它是多线程执行的。(至少我可以在我的开发机器上观察到更高的处理器利用率,这让我不相信它现在正在运行多线程)

但是,后续任务仍然是非异步代码活动。我的问题如下:

  • 我是否应该将第二个和第三个活动也转换为异步(我怀疑会是这种情况)

  • 如果不是,当第一个是AsyncCodeActivitiy而第二个和第三个不是AsyncCodeActivitiy时,如何在ParallelFor中实际执行处理


  • 当所有子活动同时进行时,它们将被安排在同一时间。这意味着放入一个队列,调度程序在同一时间只执行一个队列。对于异步活动,这意味着开始是被调度的,它可以生成其他线程,结束部分在发出完成信号时被调度,并在调度程序开始执行时真正执行


    实际上,这意味着对于在具有大量其他工作的服务器上执行的工作流,异步活动最好用于异步IO,如网络或数据库IO。在服务器上,向已经繁忙的系统添加多个CPU线程甚至会降低速度。如果工作流在客户端上执行,则异步IO和CPU工作都是有意义的。

    Ahh,因此最好以非异步方式执行序列中的第一个计算密集型活动,并以异步方式执行序列中的两个后续活动。如果您在服务器上运行此操作,并且期望合理的工作负载是正确的。