隔离如何跨CPU核心分布在Dart中,您可以同时运行多个分离株,我还没有找到使用分离株的指南或最佳实践。我的问题是,同时运行的隔离的数量将如何影响总体CPU使用率和性能,使用少量隔离(甚至仅一个)是否更好。
vptzau2j1#
一个隔离占用一个平台线程-使用多个隔离调试Dart/Flutter应用时,您可以在 * VSCode * 的 * 调用堆栈 * 窗格中观察每个隔离创建的线程。如果感兴趣的工作负载允许并行,您可以通过隔离获得巨大的性能提升。注意,Dart明确地抽象了实现细节,而文档避免了分离菌株及其intrinsic的调度细节。
根据经验确定隔离/线程数时,您可以将内核数作为初始值。您可以使用import 'dart:io';并使用Platform.numberOfProcessors属性来确定内核数。不过,需要进行微调实验,以确定哪个数量更有意义。有许多因素会影响最佳线程数:
import 'dart:io';
Platform.numberOfProcessors
var numberOfIsolates = max(Platform.numberOfProcessors - 2, 2)
isolate提供的模型比标准线程模型所建议的要严格得多。
Isolates communicate only via messages与****线程中的大量同步原语(临界区、锁、信号量、互斥锁等)。明显的折衷是,Isolate不易于出现多线程编程问题(棘手的错误、调试、开发复杂性),但提供的实现并行性的功能较少。在Dart/Flutter中,只有2种方法可以处理分离菌株:1.低级,Dart样式-使用Isolate类生成单个分离菌株,设置消息发送/接收端口、代码入口点。
Isolates communicate only via messages
Compute
b5buobof2#
在CPU内核之间分配隔离是由操作系统完成的。但每个隔离对应一个线程。要使用的隔离数量将取决于物理可用的CPU内核数量。这是由一个简短的文章,可在这里说明:https://martin-robert-fink.medium.com/dart-is-indeed-multi-threaded-94e75f66aa1e
2条答案
按热度按时间vptzau2j1#
一个隔离占用一个平台线程-使用多个隔离调试Dart/Flutter应用时,您可以在 * VSCode * 的 * 调用堆栈 * 窗格中观察每个隔离创建的线程。如果感兴趣的工作负载允许并行,您可以通过隔离获得巨大的性能提升。
注意,Dart明确地抽象了实现细节,而文档避免了分离菌株及其intrinsic的调度细节。
根据经验确定隔离/线程数时,您可以将内核数作为初始值。您可以使用
import 'dart:io';
并使用Platform.numberOfProcessors
属性来确定内核数。不过,需要进行微调实验,以确定哪个数量更有意义。有许多因素会影响最佳线程数:1.指令级并行性(ILP)和为您的代码生成的特定机器代码
1.中央处理机体系结构
1.移动/智能手机场景与台式机-例如,英特尔CPU具有相同的内核,不太可能节流。智能手机具有高效和高性能的内核,它们容易小跑,创建大量线程可能会导致更糟糕的结果,因为操作系统会降低代码速度。
例如,对于我的一个Flutter应用程序(使用多个分离菌株并行处理文件),我凭经验得出以下代码片段,用于确定要创建的分离菌株数量:
isolate提供的模型比标准线程模型所建议的要严格得多。
Isolates communicate only via messages
与****线程中的大量同步原语(临界区、锁、信号量、互斥锁等)。明显的折衷是,Isolate不易于出现多线程编程问题(棘手的错误、调试、开发复杂性),但提供的实现并行性的功能较少。
在Dart/Flutter中,只有2种方法可以处理分离菌株:
1.低级,Dart样式-使用Isolate类生成单个分离菌株,设置消息发送/接收端口、代码入口点。
Compute
辅助函数-它获取输入参数,使用定义的入口点创建新分离菌株,处理输入并提供单个结果-而不是来回通信、事件流等,请求-响应模式。请注意,在Dart/Flutter SDK中没有任务并行库等并行API(TPL)在. NET中提供多核CPU优化的API,以在多个线程上处理数据,例如并行排序集合。大量算法可以从使用线程的并行性中受益,但在没有共享内存的隔离模型中不可行。此外,也没有隔离池,一组正在运行并等待传入任务的隔离(我不得不自己创建一个https://pub.dev/packages/isolate_pool_2)。
b5buobof2#
在CPU内核之间分配隔离是由操作系统完成的。但每个隔离对应一个线程。要使用的隔离数量将取决于物理可用的CPU内核数量。
这是由一个简短的文章,可在这里说明:https://martin-robert-fink.medium.com/dart-is-indeed-multi-threaded-94e75f66aa1e