ペロハム大学

ヤルゾー

プロを目指す人のためのTypeScript入門 読書メモ⑫ 第8章(1)

■ 思ったこと

ずっとゲームしてたがリンバスのEGOから人格逆引きツールを作りたくなって勉強のモチベも復活した!

■ 第8章 非同期処理(8.3.1~8.2.4)

前詰んだところ!

非同期処理

  • とは、裏で行われる処理
  • そして、時間がかかる処理!

時間がかかる処理ってどんなのよ

  • 通信、自分の端末とWebサーバの間には物理的に距離があるゆえ時間がかかる
  • あと、ファイルの読み書きも。HDDやSSDにアクセスする時間がかかるのさ
  • DB処理が関われば、サーバへの通信時間+処理時間でさらに時間はかかる

ブロッキング・ノンブロッキング

  • 時間のかかる処理はブロッキングなものとノンブロッキングなもの二種に分類される
  • TypeScriptでは非同期処理=時間がかかる処理=ノンブロッキング
  • 待ち時間もプログラムを実行し続けるため、複数クライアントに対応可能
  • では、ブロッキングな処理とは…完了するまでプログラムが停止するような処理!
  • 待ちの時間が生まれるので、結構タイムロス

シングルスレッドモデル

  • TypeScriptでは時間かかる処理がブロッキングなのはあんま歓迎されない
  • それは…実行モデルがシングルスレッドなため
  • 分かりやすく言うと、プログラムの複数個所が同時に実行されることはない!ということ
    • TypeScriptは常にプログラムの一か所のみが実行されてため
    • シングルスレッドかつブロッキングな処理なんてされたら、クライアント一人の使用でプログラムの実行がストップしてしまう
  • なので!複数クライアントが接続しそうな通信処理はノンブロッキングであってほしい

ところで、シングルスレッドって結局並行処理できないのになんか意味あるのか?

  • Node.jsは通信処理をOSにお願いすることで通信を実行している
  • なので、待ち時間とはOSの処理を待つことである
  • OSの処理は並行に行うことができる…そういうこと!

コールバック関数

  • では、TypeScriptで非同期処理はどうやって行うか?色々あるけど、コールバック関数が使える
  • コールバック関数とは、非同期処理が終わった後に呼び出される関数!
  • ノンブロッキングな処理は勝手にノンストップで始まるが、その終了を待たずに次の処理がはじまってしまう。ので、こいつを使うことで終了を教えてあげるのさ
  • readlineも、文字が入力されるまで処理の実行を待ってくれたよね、こんな感じでreadline((入力値)=>{処理})
  • 失敗を見越してエラーオブジェクトを引数に入れてあげるのも大事、詳細は各APIまで!

コールバック関数 ~タイマー編~

  • タイマーは一定時間後に特定の処理をすること、setTimeout関数で使おう
  • 一定時間待ってる間に次の処理を進めてくれるのさ
// 第1引数:コールバック関数
// 第2引数:数値(ミリ秒数)
setTimeout(() => {
    console.log("タイマー呼ばれた");
}, 3000);
console.log("タイマー設定");

同期処理と非同期処理の順序

  • TypeScriptはにおいて、同期的に実行中のプログラムに、非同期処理が割り込むことは、、ない!…とは??
    • 同期的に実行中のプログラム=上から下に実行中のプログラム
    • この状態で非同期処理が完了してもわざわざ中断してコールバック関数を呼んでくれない
    • 同期的な処理が全部終わったらやっと呼ばれるってことさ

■ 感想

この記事自体は3/7に書いてたのに全然更新してなった!もったいねえ!難しいのは次のPromiseとかからだね。