0Pricing
Dart Academy · レッスン

高速な処理委譲に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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. スレッドではなくIsolateを使う理由
  2. 高速な処理委譲にIsolate.runを使う
  3. Isolate の生成とメッセージパッシング
  4. カクつきを防ぐ高負荷処理
← Dart Academyに戻る