Aro*_*olm 16 parallel-processing multithreading dart dart-isolates
Dart中的隔离区是否会利用多核环境中的所有可用内核并行运行,还是会在单个内核上进行多路复用?
谷歌已经将Dart编程语言中的隔离(单线程并发单元)描述为一个"轻量级线程",它在主堆栈上运行,没有阻塞.
因此,在我看来,它只能在单个内核上进行多路复用,并且无法在SMP,双核,多核或集群环境中的多个内核上并行运行.
虽然,我找不到任何关于此的信息,因此我的谦虚问题.
Aro*_*olm 13
也许.
该镖:隔离库指南指出:" 株可能.在一个单独的进程或线程运行,取决于实施对于Web应用程序,隔离可以编译为网络工作者,如果它们可用 "(我的重点)
运行此代码并观察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");
});
}
Run Code Online (Sandbox Code Playgroud)
独立的dartvm 将利用所有可用内核并行运行隔离.Dart的浏览器实现可能会有所不同,具体取决于是否实现了Web Workers.
这是Dart 1.0的更新代码.
import 'dart:isolate';
main() {
int counter = 0;
ReceivePort receivePort = new ReceivePort();
receivePort.listen((msg) {
if (msg is SendPort) {
msg.send(counter++);
} else {
print(msg);
}
});
for (var i = 0; i < 5; i++) {
Isolate.spawn(runInIsolate, receivePort.sendPort);
}
}
runInIsolate(SendPort sendPort) {
ReceivePort receivePort = new ReceivePort();
sendPort.send(receivePort.sendPort);
receivePort.listen((msg) {
var k = 0;
var max = (5 - msg) * 100000000;
for (var i = 0; i < max; ++i) {
i = ++i - 1;
k = i;
}
sendPort.send("I received: $msg and calculated $k");
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6542 次 |
| 最近记录: |