イベントループとマイクロタスク
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- イベントループとマイクロタスク
- Futureの作成とawait
- asyncコードのエラーハンドリング
- Future.waitと並列処理