동기적 프로그래밍
- 순서대로 하나의 작업씩 수행하는 행위
- 순차적으로 수행하기 때문에 앞선 작업에 영향을 받음.
- 만약 앞선작업이 끝나지 않는다면 뒷작업은 영원히 수행 불가
- 꼭 동기적으로 실행하지 않아도되는 기능은 비동기적으로 실행하는것이 좋다.
비동기 프로그래밍
- 한 작업이 완료되기를 기다리지 않고 다른 작업을 수행하는 프로그래밍 패러다임
- 여러 작업을 효율적으로 처리하고 응답성을 높일 수 있다.
- 파일 읽기/쓰기, 네트워크 통신, 데이터베이스 쿼리와 같이 시간이 오래 걸리는 작업(I/O 작업)은 기다리지 않고 다른 작업을 수행해야한다. 이를 통해 CPU 자원을 효율적으로 활용할 수 있다.
- 이벤트(예: 클릭, 키보드 입력)는 예측하기 어려운 순서로 발생할 수 있으므로 비동기적으로 처리한다.
구현 방법
콜백(Callback)
특정 작업이 완료되면 지정된 콜백 함수를 호출하는 방식으로 비동기 동작을 처리한다. 콜백 지옥(Callback Hell)이라는 문제가 발생할 수 있습니다.
프로미스(Promise)
ES6부터 JavaScript에 추가된 개념으로, 비동기 작업의 완료나 실패에 대한 결과를 쉽게 처리할 수 있다. 프로미스는 연결할 수 있으므로 콜백 지옥을 해결가능
비동기/대기(async/await)
ES8부터 JavaScript에 도입된 개념이다. 비동기 작업을 동기적인 코드처럼 작성할 수 있다. async 함수 내에서 await 키워드를 사용하여 비동기 작업을 기다리고 결과를 받아올 수 있다.
스레드(Thread) 및 병렬 처리
멀티 스레딩 또는 병렬 프로그래밍을 사용하여 여러 작업을 동시에 실행한다. 이를 통해 다중 CPU 코어를 활용하고 빠른 처리를 할 수 있다. Java, C++, Python, Kotlin 등에서 스레드를 사용하여 비동기 프로그래밍을 구현할 수 있다.