gpt4 book ai didi

flutter - 使用 Isolate 处理大量任务

转载 作者:IT王子 更新时间:2023-10-29 07:14:01 25 4
gpt4 key购买 nike

我有大约 10k 个长时间运行的任务需要按顺序计算。为此,我决定使用 Isolates。问题是我应该每次都为每个单独的任务创建 spawn Isolate 还是应该为所有任务的执行只创建一个 Isolate。我不知道创建 Isolates 的成本有多高。

创建一个 Isolate 并将其用于所有任务的来源:

import 'dart:isolate';

class DataPacket {
SendPort port;
int result;
}

class SquareRootCalculator {

final ReceivePort _masterPort = new ReceivePort();
SendPort _workerPort;

SquareRootCalculator() {
Isolate.spawn(isolateFunction, _masterPort.sendPort).then((isolate) {
_masterPort.listen((data) {
if (_workerPort == null)
_workerPort = data.port;
else {
print(data.toString());
}
});
});
}

input(int n) {
_workerPort.send(n);
}
}

void isolateFunction(SendPort masterPort) {
ReceivePort _workerPort = new ReceivePort();

DataPacket packet = new DataPacket();
packet.port = _workerPort.sendPort;
packet.result = -1;
masterPort.send(packet);

_workerPort.listen((data) {
int out = calculate(data);

DataPacket packet = new DataPacket();
packet.port = _workerPort.sendPort;
packet.result = out;
masterPort.send(packet);
});
}

int calculate(int number) {
for (var i = 0; i < 1000000000; ++i) {} // long running task
return number * number;
}

我可以推送任务

 SquareRootCalculator _calc = new SquareRootCalculator();

for(int i = 0; i < 100; ++i){
_calc.input(i); //task
sleep(const Duration(seconds:1));
}

最佳答案

如果您创建很多,则创建隔离物会相当昂贵。

我绝对建议只创建一个并使用 SendPort/ReceivePort 将一个任务一个接一个地推送。

https://pub.dartlang.org/packages/pool如果您希望并行运行固定数量的隔离(低于任务数量),这会有所帮助。

关于flutter - 使用 Isolate 处理大量任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50397143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com