0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

同期処理・非同期処理の違いを例を交えて解説してみた。

Last updated at Posted at 2021-05-04

##前書き
同期処理や非同期処理の概要をまとめてみました。
コールバック関数、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
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?