问题

DART中的隔离是利用多核环境中的所有可用核并行运行,还是在单个核上多路复用?

背景

谷歌在Dart编程语言中将isolates(单线程并发单元)描述为一个"轻量级线程",在主堆栈上运行,没有阻塞.

因此,在我看来,它只能在单核上进行多路复用,而不能在SMP、双核、多核或集群环境中在多核上并行运行.

不过,我找不到任何关于这方面的信息,所以我提出了一个谦虚的问题.

推荐答案

警告:下面的代码已过期,不能与Dart 1.0一起使用.

简短回答

大概

长长的答案

dart:isolate library guide个州:"Isolates 101 run in a separate process or thread, depending on the implementation. For web applications, isolates can be compiled to Web workers, if they are available."(我的重点)

运行此代码并观察CPU负载将告诉您实现是否这样做.

#import('dart:isolate');
main() {
  for (var tmp = 0; tmp < 5; ++tmp) {
    SendPort sendPort = spawnFunction(runInIsolate);
    sendPort.call(tmp).then((reply) {
      print(reply);
    });
  }
}

runInIsolate() {
  port.receive((msg, SendPort reply) {
    var k = 0;
    var max = (5 - msg) * 100000000; 
    for (var i = 0; i < max; ++i) {
        i = ++i - 1;
        k = i;
    }
    reply.send("I received: $msg and calculated $k");
  });
}

独立的DARTVM will利用所有可用内核进行并行隔离.DART will likely vary的浏览器实现取决于是否实现了Web Worker.

Dart相关问答推荐

dart 日期时差(分钟)

程序给出不准确的值

我需要在使用之前将我的 Dart 包发布到 pub.dartlang.org 吗?

Flutter热重新加载和热重启不工作

如何删除ios上的overscroll?

IndexedDB访问速度和效率

有没有办法知道我的Flatter应用程序使用的是哪个Android API版本?

如何在 Flutter 中管理 Firebase 身份验证状态?

使用 Dart 计算字符串中字母的数量

未定义命名参数child.在 Center() 构造函数中

Flutter 错误:The _ScaffoldLayout custom multichild layout delegate forgot to lay out the following child

参数类型Map Function()不能分配给参数类型Map

如何在dart中的多个文件中编写多个单元测试?

Flutter/Dart Uri 没有在 URL 中转义冒号:

如何在 Dart 中创建我们自己的metadata元数据?

扩展一个只有一个工厂构造函数的类

Dart: 必须取消 Stream 订阅并关闭 StreamSinks 吗?

如何在 Dart 中逐个字符地迭代字符串?

如何初始化构造函数主体中的最终字段?

如何在 Dart 中将日期/时间字符串转换为 DateTime 对象?