高速な処理委譲にIsolate.runを使う
メイン isolate 以外で関数を実行します
「高速な処理委譲にIsolate.runを使う」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
簡単な入口
isolateを手動で生成するのは手間がかかります。Isolate.runは、負荷の高い1つの処理をmain isolateから切り離す最も簡単な方法です。🚀
Isolate.runの動作
Isolate.runは新しいisolateを起動し、そこで関数を実行して結果を返し、そのisolateを自動的に終了します。
Futureを返す
処理は別の場所で行われるため、Isolate.runはFutureを返します。他のasync呼び出しと同じようにawaitできます。
Future<int> sumIt() => Isolate.run(() {
var total = 0;
for (var i = 0; i < 1000000; i++) total += i;
return total;
});結果をAwaitする
呼び出して結果をawaitしましょう。計算中もmain isolateはUIを滑らかに保つ処理を続けられます。
final result = await Isolate.run(heavyTask);
print(result);Top-Level Functionを渡す
実行する処理は、top-level関数かstatic関数、または単純なclosureにしてください。そうすれば、新しいisolateへ安全に送れます。
Captureには注意する
closureがcaptureする値は、新しいisolateにコピーされます。captureするデータは小さく保ち、socketのような送信できないものは含めないでください。
入力を渡す
入力が必要ですか?closureでcaptureするか、引数として渡します。Dartはそれらをcopyして渡すため、isolateは独自のデータを使って処理します。
final big = await Isolate.run(() => parseJson(rawText));結果を受け取る
関数が返す値は、そのままFuture's valueになります。値は自動的にmain isolateへコピーされます。
エラーは上位に伝わる
処理がthrowすると、Future rejectsになります。awaitをtry/catchで囲み、呼び出した場所ですぐに失敗を処理しましょう。
try {
final r = await Isolate.run(risky);
} catch (e) {
print('failed: $e');
}起動のコスト
Isolate.runを呼び出すたびに、isolateの起動と終了が行われます。オーバーヘッドがあるため、小さな処理ではなく、本当に負荷の高い処理に使うと効果的です。
この方法が適する場面
単独で完結する大きな処理が1つある場合は、Isolate.runを使います。継続的に双方向で通信するなら、通常のisolateのほうが適しています。
クイックチェック
Isolate.runは何を返しますか?
まとめ
Isolate.runは重い関数を1つ別のisolateで実行し、そのFutureを待って結果をコピーし、後片付けまで行います。並列処理への最もシンプルな道筋です。✅
よくある質問
「高速な処理委譲にIsolate.runを使う」レッスンは無料ですか?
はい。「高速な処理委譲にIsolate.runを使う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「高速な処理委譲にIsolate.runを使う」で何を学びますか?
メイン isolate 以外で関数を実行します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「高速な処理委譲にIsolate.runを使う」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- スレッドではなくIsolateを使う理由
- 高速な処理委譲にIsolate.runを使う
- Isolate の生成とメッセージパッシング
- カクつきを防ぐ高負荷処理