Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@tsuji_za

同期処理・非同期処理について

前書き

同期処理や非同期処理の概要をまとめてみました。
コールバック関数、Promise、async / awaitなど今後まとめていきたいと思います。

同期処理・非同期処理の説明の前に

PCの計算時間について

時間
CPUの1サイクル およそ0.3ナノ秒
Floatの足し算 1.2ナノ秒
メモリのデータを参照する速さ 120ナノ秒
SSDからのデータの読み取り 100マイクロ秒(マイクロ秒はナノ秒の1000倍)
日本からシリコンバレにインターネットでやりとりする時間 100ミリ秒(ミリ秒はマイクロ秒の1000倍)

CPUの1サイクルを1秒とした場合

時間
CPUの1サイクル 1秒
Floatの足し算 4秒
メモリのデータを参照する速さ 6分
SSDからのデータの読み取り 4日
日本からシリコンバレーにインターネットでやりとりする時間 およそ10年

CPUで計算したり、メモリからデータを参照する事と比べて、インターネットを通じてデータを取得するというのはものすごく時間がかかる事が分かります

同期処理とは

コードを順番に処理していき、ひとつの処理が終わるまで次の処理は行わない処理の事です。
どんなに時間のかかる処理を行っていたとしても、同期処理の場合はその処理が終わるまで待ちます。

二つ例を出してみます。

ネットワーク通信の場合

同期処理でネットワーク通信を行った場合、時間のかかるインターネット通信が終わってからじゃないと次の処理を行うことができません。
CPUの1サイクルを1秒とした場合、ネットワーク通信は10年かかります。
その間に色々計算できそうですが、10年後にならないと他の処理ができないのでリソース的に勿体無いですよね。

人間世界の場合

人間世界を例として以下のことをしたいとします。

  • お風呂に入る ->自分
  • 食洗機で食器を洗う ->食洗機
  • 食器を片付ける ->自分

スクリーンショット 2021-05-04 17.16.51.png

同期処理の場合だと自分がお風呂に入り終わったら食洗機で食器を洗い、洗い終わったら自分が干すという処理になります。
これだと食洗機が皿を洗ってる間に自分というリソースは使用されず放置状態になります。

非同期処理とは

処理が終わるのを待たずに、同時に複数の処理を実行することができます。
誰かに仕事をお願いする事で、自分は他の仕事を進める事ができる仕組みです。
その結果、複数処理を実行する事ができます。
先ほど例にあげたネット通信も非同期で行った場合、ネット通信の結果を待たず、CPUの計算も行う事ができます。

人間世界の例も同様です。
スクリーンショット 2021-05-04 17.24.27.png
食洗機に頑張って食器を洗ってもらう間に自分はお風呂に入ってしまいます。
結果として同期処理より早く処理を終える事ができます。
このように非同期処理では誰かに仕事をお願いすることで自分は別の作業を進める事ができ、結果として同時に複数の処理を行う事ができます。

非同期処理の難しさ

非同期通信で複数処理を行った場合、どちらの作業が先に終わるかが分かりません。
そのためどちらが先に処理が終わってもいいように、プログラムを書いておく必要があります。
その点同期通信だと順番に処理を行い、その処理が終わるまで待つのでどちらが先に終わるかを考えなくていいですよね。

参考

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tsuji_za
24歳 エンジニアになるため転職活動中です! 日々学習したことをアウトプットしていきます!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?