问题
DART中的隔离是利用多核环境中的所有可用核并行运行,还是在单个核上多路复用?
背景
谷歌在Dart编程语言中将isolates(单线程并发单元)描述为一个"轻量级线程",在主堆栈上运行,没有阻塞.
因此,在我看来,它只能在单核上进行多路复用,而不能在SMP、双核、多核或集群环境中在多核上并行运行.
不过,我找不到任何关于这方面的信息,所以我提出了一个谦虚的问题.
DART中的隔离是利用多核环境中的所有可用核并行运行,还是在单个核上多路复用?
谷歌在Dart编程语言中将isolates(单线程并发单元)描述为一个"轻量级线程",在主堆栈上运行,没有阻塞.
因此,在我看来,它只能在单核上进行多路复用,而不能在SMP、双核、多核或集群环境中在多核上并行运行.
不过,我找不到任何关于这方面的信息,所以我提出了一个谦虚的问题.
大概
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.