Open1

JavaScript非同期処理

TkTk

非同期処理と同期処理

上記がどうなっていて、Javascriptではどうなのかを学ぶ

  • 同期処理

    同期処理は処理が順番に行われるもので現在の処理が完了してから次の処理が行われる

  • 非同期処理

    非同期処理とは処理が非順次的に行われる

違いとしては

  • 前の処理を待つかどうか
  • 全て完了するまでの時間は非同期処理の方が短くユーザーを待たせないメリットがある

JavaScriptはシングルスレッド

シングルスレッドなので2つの処理を並列して実行させることができない・・・はずなんだがどうやって実現しているの?

  • コールスタック

    現在どの関数が実行されているのか?その関数の中でどんな関数が呼び出されたのかを追跡する
  • タスクキュー

    コールバック関数が待機する場所
  • WebAPI

    ブラウザが提供する機能でありJavaScriptの機能ではない
  • ヒープ

データ構造の理解が必要

スタック

LIFO(last in first out)

関数はコールスタックに追加され、function1→function2→function3とつまれ、funtion3→2→1の順にコールスタックから消えていく

キュー

FIFO
非同期関数の引数に渡されたコールバック関数はこのタスクキューに登録され、コールスタックがからになるまで待機をしている

WebAPI

これを利用すると複雑な機能を実装することができる
イメージとするならコンセントとか
コンセントとかを利用することで簡単に電気を利用することができている
例ではsetTimeout、setIntervalなどのようなブラウザが提供するTimerAPIという外部APIを利用している
このようにWebAPIに処理を任せているのでシングルスレッドでも非同期処理を実現できている