web/javascript
JavaScript - 동기(synchronous), 비동기(asynchronous)
blackbearwow
2023. 2. 15. 23:51
c, c++, java, python을 공부한 나에게 프로그래밍 언어는 항상 동기적으로 동작하는 줄 알았다.
c, c++, java는 비동기적으로 여러가지 작업을 처리하려면 thread또는 process를 만들어 사용해야 한다.
(python은 어떻게 작동하는지 잘 모른다)
물론 javascript도 동기적으로 동작한다. 하지만 javascript는 비동기적으로 동작하기도 한다!
대표적으로 setInterval(), setTimeout() 함수가 비동기적인 함수이다.
나중에 이해한 내용
c, c++, java는 thread를 만들거나 fork로 process를 만들어 여러가지 작업을 동시에 작업한다.
js는 thread를 만들거나 fork를 할 수 없다. 대신 Promise 또는 webapi를 사용해 여러가지 작업을 비동기적으로 (동시에) 작업할 수 있다. setInterval, setTimeout이 webapi의 함수들이다.
c++의 thread는 운영체제가 스케줄링 해주는 대로 작업이 진행된다.
js는 특정 요청들(timer, fetch등 webapi에서 처리하는 작업들)에 대해서만 다른 thread(webapi의 thread)에서 처리하고, 코드는 main thread에서 처리한다.