|
|
1
12
见 Task Parallel Library vs Async Workflows . 我将把基本知识总结如下: 任务并行库 :允许多个工作单元在多个核心上高效运行,包括相对简单的场景,例如生成多个线程并行执行类似的计算,以及更复杂的操作,其中计算本身也最终生成其他任务。使用改进的.NET 4.0线程池和工作窃取队列来确保所有核心都处于繁忙状态。 异步工作流 :允许异步计算在不占用不需要的线程的情况下运行,并在结果可用时启动回调。 普林克 :使用plinq编写的代码最终通过tpl运行,但对于使用linq查询轻松表示的代码来说,这是一个更好的接口(例如,对数据数组中的每个项目并行执行单个操作)。
请注意,异步工作流可以使用
对我来说,经验法则是,如果你在不同的线程上进行大量的计算,你会想要使用tpl(可能通过plinq或f等价物,如pseq模块),而如果你试图做大量的IO(无论是否并行),你应该使用异步工作流。 因此,光线跟踪器将使用tpl启动任务,并行渲染每个像素(或扫描线),最大限度地提高计算机的可用计算能力。 但是,由于没有太多的计算可以在核心之间传播,下载大量的网页将通过异步工作流完成;当结果出现时,操作系统只需要通知您。 |
|
2
1
异步工作流是通过F_monadic语法实现的。这意味着,您可以编写自己的基于并行任务库的“异步”版本,而不是将工作流转换为任务。我说这个有几个警告:
有关如何在f_中实现monad的更多详细信息,请参阅“专家f_”一书或在“f_monads”上搜索一点。 我知道答案不完整,但希望能有所帮助。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |