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 证明上下文切换是开销的工具?_Multithreading_Performance_Playframework_Threadpool - Fatal编程技术网

Multithreading 证明上下文切换是开销的工具?

Multithreading 证明上下文切换是开销的工具?,multithreading,performance,playframework,threadpool,Multithreading,Performance,Playframework,Threadpool,目前正在使用Play!框架和阿克卡。我经常听说Scala Future的效率不高,因为每个映射都是一个推送到新线程的新任务。有一个潜在的问题,我是压倒性的线程池由于这种行为。我想知道有没有一个工具可以给我提供线索,在CPU限制的任务之间不必要的上下文切换会导致延迟恶化 谢谢 我用你的装备来分析比赛。如果应用程序中的所有时间都花在Akka的Dispatcher类、Scala的ExecutionContext类或Java的ForkJoinPool类上,那么很可能是您进行了太多的上下文切换。在Play

目前正在使用Play!框架和阿克卡。我经常听说Scala Future的效率不高,因为每个映射都是一个推送到新线程的新任务。有一个潜在的问题,我是压倒性的线程池由于这种行为。我想知道有没有一个工具可以给我提供线索,在CPU限制的任务之间不必要的上下文切换会导致延迟恶化


谢谢

我用你的装备来分析比赛。如果应用程序中的所有时间都花在Akka的
Dispatcher
类、Scala的
ExecutionContext
类或Java的
ForkJoinPool
类上,那么很可能是您进行了太多的上下文切换。在Play的性能测试中,我们发现(意外地)引入了一个额外的上下文开关,使性能降低了5%(尽管这是一个hello world性能测试,它什么都不做,总是对基准进行测试)。

Dispatcher是一个线程,所以不是所有的时间都花在Dispatcher上了吗?我想知道的是,我们如何知道我们的上下文切换太多了。我可以从理论上对此进行推理,例如,如果您的任务是纯非阻塞IO(例如play.WS),那么拥有多个线程将降低请求的延迟。但我需要一个证据,你想看到什么来检测这种特定的行为?我也使用你的工具包。Dispatcher不是一个线程,它是一个线程池。每次“上下文切换”时,当任务被发送到线程池、排队等待执行、由池中的线程执行并执行时,都会有很多机制。上下文切换的成本是由这些机制支付的,因此,如果你看到所有的时间都花在这些课程上,这意味着你的应用程序的瓶颈在于上下文切换。我把“上下文切换”放在引号里,因为通常人们认为CPU上下文切换,但在线程上的任务之间切换实际上是一种不同类型的上下文切换。