0Pricing
Dart Academy · レッスン

イベントループとマイクロタスク

Dartが非同期処理をスケジュールする仕組みを理解する

「イベントループとマイクロタスク」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

1つのスレッドで待たせない

Dartは1つのスレッドでコードを実行しますが、処理が止まることはありません。その秘密は、処理をブロックせずにスケジュールするイベントループです。⚡

イベントループの役割

イベントループは単純なサイクルです。次に待機しているタスクを取り出して完了まで実行し、それを繰り返します。コードは整然と、途中で中断されることなく実行されます。

同期処理が先

通常のトップダウンのコードは、すべて先に実行されます。同期処理が終わって初めて、ループがスケジュールされたタスクの処理を始めます。

2つのキュー

ループは、マイクロタスクキューとイベントキューという2つの待ち行列から処理を取り出します。マイクロタスクは常にイベントより先に処理されます。

マイクロタスクキュー

マイクロタスクとは、完了したFutureのコールバックのような、小さな遅延処理です。ループはイベントキューに触れる前に、すべてのマイクロタスクを処理します。

イベントキュー

イベントキューには、タイマー、ファイル読み取り、タップ、ネットワーク応答など、比較的大きな処理が入ります。すべてのマイクロタスクが終わるまで待機します。

マイクロタスクをスケジュールする

scheduleMicrotaskを使うと、処理をマイクロタスクキューに渡せます。現在のコードの後、どのイベントよりも前に実行されます。

scheduleMicrotask(() => print("microtask"));
print("right now");

イベントをスケジュールする

Timer(または0を指定したFuture.delayed)はコールバックをイベントキューに追加します。そのため、待機中のすべてのマイクロタスクが終わった後に実行されます。

Timer.run(() => print("event"));
print("right now");

マイクロタスクが先

両方がキューに入っている場合、マイクロタスクが先に実行されます。この順序により、Futureのチェーンが軽快で予測しやすくなります。

scheduleMicrotask(() => print("A"));
Timer.run(() => print("B"));
// prints A then B

スムーズに動作する理由

各タスクが完了まで実行されるため、アプリの状態が中途半端に更新されることはありません。ループが、スレッドを手動で管理しなくてもアプリの応答性を保ちます。

ループを飢餓状態にしない

マイクロタスクキューに処理を詰め込みすぎると、イベントがいつまでも処理されず、入力が止まる可能性があります。マイクロタスクは短くし、イベントにも順番を渡してください。

クイックチェック

キューの処理順序を確認しましょう。

まとめ:イベントループ

イベントループは、まず同期コードを実行し、次にマイクロタスク、最後にイベントを処理することを学びました。この順序により、Dartはシングルスレッドでもスムーズに動作します。🎉

よくある質問

「イベントループとマイクロタスク」レッスンは無料ですか?

はい。「イベントループとマイクロタスク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「イベントループとマイクロタスク」で何を学びますか?

Dartが非同期処理をスケジュールする仕組みを理解する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「イベントループとマイクロタスク」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. イベントループとマイクロタスク
  2. Futureの作成とawait
  3. asyncコードのエラーハンドリング
  4. Future.waitと並列処理
← Dart Academyに戻る