特性を理解する!ノンブロッキングとは【初心者向け】
初心者向けにノンブロッキングとは何か解説しています。非同期処理との違いやノンブロッキングの特性について説明しています。処理の流れを料理に例えて紹介しているので、参考にしてみてください。Node.jsを習得したい人は必見の内容です。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回は、ノンブロッキングについて解説します。
Node.js環境下において、画面遷移せずに現在の処理状況を確認しつつ、他の処理も実行したい場合に参考にしてみてくださいね。
なお本記事は、TechAcademyのNode.jsオンライン講座の内容をもとに作成しています。
今回はノンブロッキングという言葉について勉強してみよう。加えて同期処理・非同期処理についても解説していくよ。
田島メンター!非同期処理というと、Promiseやasyncというパッケージがありましたよね。ノンブロッキングというのは何ですか~?
ノンブロッキングと非同期処理は共通するところが多いけれど、少し違う点があるんだ。それぞれの具体的な特徴を挙げてみよう。
お願いします!
ノンブロッキングとは
ノンブロッキングとはNode.jsでは、ノンブロッキングI/Oとも呼ばれます。
ノンブロッキングI/Oとは、何かの処理前に、処理待ちが発生する場合、すぐに関数から何か返ってくるという処理です。
I/OとはInput/Outputの略です。日本語では、入出力を意味します。
コンピューターでは何かしらの情報をInput(入力)して、処理結果をOutput(出力)します。
この一連の流れをI/Oと呼びます。
ノンブロッキングをより理解するためには、ブロッキング処理(同期処理)、非同期処理を理解する必要があります。
ブロッキング処理(同期処理)で料理を作る
ブロッキング処理と同期処理は厳密に言うと違う点も存在しますが、今回は非同期処理の説明も合わせるため同じような意味として、ブロッキング処理(同期処理)として解説します。
ブロッキング処理(同期処理)はこれまでのWebサービスでの処理方法です。
目玉焼きという料理を例に考えてみます。
処理
フライパンを火にかける ↓ 油をひく ↓ 卵を割る ↓ 水を入れる ↓ フタをする ↓ 出来上がる ↓ 皿を用意する ↓ 皿に盛りつける
解説
簡単に言うと、Aという処理を行っている間は、次のBという処理は手を付けないと言う事です。
目玉焼きという料理に例えると順番に処理をすることになります。
非同期処理で料理を作る
非同期処理は同期せずに処理を実行する方法です。
目玉焼きという料理に例えると次のようになります。
処理
フライパンを火にかける ↓ 油をひく ↓ 卵を割る ↓ 水を入れる ↓ フタをする ↓ 出来上がりの通知が来るまでの間で皿を用意する ↓ 出来上がりの通知が来たら皿に盛りつける
解説
ブロッキング処理(同期処理)との違いとして、フタをしたあと、出来上がりの通知が来るまでの間、皿を用意するという別の処理を行うことができます。
そして、自身で出来上がったかの確認をすること無く、出来上がったという通知が来てから皿に盛り付けています。
つまり、皿を用意する以外の処理が存在していれば、出来上がりの通知が来るまでの間は他の処理をすることが可能です。
まずは同期処理・非同期処理の特徴だね。
非同期処理は、他の処理を行っているときも並行して別の処理を行うって感じでしょうか。
次はノンブロッキングでの処理方法と、非同期処理との違いについて見てみよう。
ノンブロッキング処理で料理を作る
ノンブロッキング処理は非同期処理と似ていますが少し違います。
目玉焼きという料理を作る過程を見ながら考えてみます。
処理
フライパンを火にかける ↓ 油をひく ↓ 卵を割る ↓ 水を入れる ↓ フタをする ↓ 数秒毎に卵に日が通っていないかチェックする ↓ 卵に火が通っていなかったので、とりあえず皿を出す ↓ 数秒毎に卵に火が通っていないかチェックする ↓ 出来上がっていたので皿に盛る
解説
ノンブロッキングもブロッキング処理(同期処理)と異なり、並行して別の処理を行うことができます。
ただ、非同期処理と異なる点として、非同期処理では目玉焼きに火が通ったかどうかは通知によって知ることができます。
ノンブロッキングでは、目玉焼きに日が通っていないかチェックする事で知ることができます。
実際のシステムでノンブロッキングは、処理がすぐできない場合、エラーが返ってきてブロック状態にさせないという処理を行います。
今回は、ノンブロッキングについて解説しました。
最後にノンブロッキングの特徴について解説したよ。
プロセスをブロック状態にさせないから、ノンブロッキングということなんですね。
実際に処理を行う際の記述方法などはまた別のところで解説するので、まずは全体の流れを把握しておこう。
頭に入れておきます。ありがとうございました!
また、オンラインのプログラミングスクールTechAcademyでは、Node.jsオンライン講座を開催しています。
Node.jsを使ってWebアプリケーションを開発することができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。
この記事を監修してくれた方
中本賢吾(なかもとけんご) 開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。 その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。 |