Concurrency 不并发执行的并行异步任务

Concurrency 不并发执行的并行异步任务,concurrency,parallel-processing,.net-core,f#,Concurrency,Parallel Processing,.net Core,F#,我正在尝试对多智能体系统的一组模拟进行并行化,以便它们能够利用我目前可用的尽可能多的cpu核。为此,我尝试将每个模拟打包为一个单独的异步计算,然后并行运行它们 下面的代码是如何运行模拟的。SimulationLst是模拟初始状态的列表。每次模拟都会返回一个整数列表,然后对所有模拟进行平均。每个模拟都没有副作用 SimulationList |> List.map (fun simulation -> async {return runSimulation simulation}) |

我正在尝试对多智能体系统的一组模拟进行并行化,以便它们能够利用我目前可用的尽可能多的cpu核。为此,我尝试将每个模拟打包为一个单独的异步计算,然后并行运行它们

下面的代码是如何运行模拟的。SimulationLst是模拟初始状态的列表。每次模拟都会返回一个整数列表,然后对所有模拟进行平均。每个模拟都没有副作用

SimulationList
|> List.map (fun simulation -> async {return runSimulation simulation})
|> Async.Parallel
|> Async.RunSynchonously
|> Aray.toList
|> List.concat
|> List.average
问题是,当我运行程序时,前四个模拟会立即启动,但下一个会一个接一个地缓慢启动。结果是cpu利用率开始时非常低,并且缓慢上升以使用更多的内核

为什么这些计算不能立即开始?是不是因为我是在一个相当高的水平上进行模拟的?更细粒度的并发会使这项工作更好吗


这个问题没有太多关于我正在使用的代码的细节,因为代码太多了,但是如果有帮助的话,请询问更多细节。

我的猜测是,线程池中可用于处理任务的线程数量有限,因此正在以0.5/秒或更高的速度缓慢增加线程数1/秒。在运行代码之前,您应该尝试调整最小线程池线程数,看看这是否可以缓解问题。

谢谢!我认为这是有效的。我会先核实一下,再跟进一下。我认为这本身并不是一个问题。这些任务现在应该同时执行。但每个核心的利用率只有10%。我有72个线程的72个核心。我对每个任务都进行了功能性编程,但找不到它们之间的任何依赖关系。我怎样才能着手调查这种减速的原因呢?