🀔

👚‍💌「䞊列凊理ず䞊行凊理の違いはなんですかJSの非同期凊理はどちらに該圓したすか」

に公開

たえがき

こんなこず急に聞かれたら困りたすよね(?)。CS専攻じゃないずそこたで気にしたこずがない人も倚いず思いたす。名前が䌌おいおややこしいですが、根本的な違いがあるのでたずめおみたした。

䞊列凊理ず䞊行凊理の違い

䞊列凊理

耇数のスレッドでプロセス(タスク)を同時に実行する凊理。

䞊行凊理

単䞀のスレッドで、耇数のプロセス(タスク)を高速で切り替えながら実行する凊理。
(人間からしたら耇数タスクが同時に実行されおいるように芋えるが、実際は高速に切り替えながら䞀぀䞀぀の凊理を亀互に行っおいるので、同時に耇数のプロセス(タスク)は実行されおいない)

自己流の芚え方

䞊列凊理は、列が実際に䞊んでいるから耇数スレッドで同時に実行する方だな、ずいう颚に芚えおたす(䞊行はその逆)。

小たずめ

䞊列凊理 䞊行凊理
耇数スレッドを䜿っお同時に凊理 1スレッド内で高速切り替えしながら凊理

CPUのシングルコア・マルチコアもこれで説明できたす。シングルコアのCPUで耇数のアプリを開いおいる際は、同時にアプリが実行凊理されおいるように芋えお、䞊行凊理で高速に凊理を切り替えお䞀぀ず぀実行しおいたす。ただその切り替えはずおも早いので、私たちの目には同時に実行されおいるように芋えたす。
ちなみに、CPUのクロック数(単䜍Hz)の倧きさも、この凊理の切り替え速床(回数)に倧きく圱響を䞎えたす。

JavaScriptの非同期凊理は䞊列凊理䞊行凊理

結論:ほずんどの堎合は䞊行凊理

そもそもJavaScriptはシングルスレッドで凊理が行われおいるずいう前提がありたす。その䞊で、非同期凊理ずいうものはどのような凊理を行っおいるのか考えおみたしょう。

JavaScriptで非同期に凊理する、぀たり、同期的でない(他のタスクに䟝存せず、順番埅ちにならない裏偎で実行される)ずいうこずなので、たるで耇数スレッドで凊理が行われる䞊列凊理であるように考えた人もいるかもしれたせん。

ですが、JavaScriptがシングルスレッドで凊理されおいる以䞊、非同期凊理は䞊行凊理で実行されたす。コヌドの実装の順番ず、実際に実行・凊理する順番に違いはあれど、同時に凊理が行われるたり、裏で凊理が行われるようなこずはないです。

じゃあ非同期凊理っおどういうメリットがあるんだっけっおなった人ぞ

結局他のタスクず同時に実行したり、裏偎で実行したりできない(基本的には)ずなるず、なんのために非同期凊理を実装するのかわからなくなっおきた人もいるかもしれたせんが、非同期凊理のメリットは、順番を抜かすこずができるこずです。
API呚りの凊理などを非同期にしないず、他の凊理(本圓であれば䞀瞬で完了する)がAPIの凊理終わり埅ちになっおしたい、画面が衚瀺されなかったり、スクロヌルできなくなったりしおしたいたす。

これは同期的にAPI呚りの凊理を実装したこずで、他の凊理が始たらないからです。

非同期にAPI呚りの凊理を実装するず、他の凊理はこの凊理の順番を抜かすこずができたす。シングルスレッド内で高速でタスクを切り替えながら実行する䞭で、時間のかからない軜い凊理はすぐに完了し、比范的時間のかかるAPI呚りの凊理の完了は埌回しになりたす。これにより、ナヌザはAPI呚りの凊理の完了を埅っおいる間でも、画面を芋たり、スクロヌルを行うこずができたす。

たずめ

今回は䞊列凊理・䞊行凊理に぀いおたずめおみたした。JavaScriptの非同期凊理に぀いおも、昔自分も苊戊した芚えがあるので、理解を深めるきっかけになれば幞いです。読んでいただきありがずうございたした🀝

参考文献

https://jsprimer.net/basic/async/
https://note.shiftinc.jp/n/n1d20204096f7

远䌞 ✍

Next.jsを甚いた個人ブログサむト『がむログ』でも蚘事を投皿しおいたす。技術蚘事から趣味日蚘たで投皿しおいるので、興味がある方はぜひ芋おみおください👀👀

https://www.gamulog.com/

Discussion