동기(Synchronous: 동시에 일어나는)
순차적인 방법으로 프로그래밍이 진행되는 것을 의미한다(js).
직렬적으로 명령을 처리한다. 왜냐하면 쓰레드(Thread)가 1개이기 때문이다.
**Thread: 명령어가 흐르는 통로
동기처리 방식을 확인해보면 순차적으로 값이 나타난다는 것을 알 수 있습니다.
처리한 순서 그대로 hello - yoon - Hello Again의 결과값이 출력됩니다.
동기방식은 설계가 간단하고 직관적이지만 결과가 나올 때까지 대기해야 한다.
즉, 서버에 데이터를 요청하고 데이터가 응답되기 전까지 이후에 작업되는 것들은 블로킹(blocking, 작업중단)된다.
비동기(Asynchronous : 동시에 일어나지 않는)
비순차적인 방법으로 프로그래밍이 진행되는 것을 의미한다.(node)
클러스터링(병렬적으로 명령을 처리).
**clustering: 클러스터링(군집화)은 개체들이 주어졌을 때, 개체들을 몇 개의 클러스터(부분 그룹)으로 나누는 과정을 의미.
이 과정에서는 실행 순서는 Hello - setimeout - Hello Again 입니다.
하지만 결과값은 Hello - Hello Again - yoon이 나옵니다.
그 이유는 setimeout을 통해 콜백 함수를 사용하게 되었고 1초후에 결과값이 나오도록 실행했기 때문입니다.
따라서, Hello - Hello Again 을 먼저 출력하고 1초 뒤에 yoon이 출력됩니다.
비동기방식은 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업이 가능하다.
즉, 논블로킹(Non-Blocking)하며 다음 임무를 수행한다.
비동기 처리가 필요한 이유
비동기처리는 비순차적인 방법을 순차적으로 만드는 것을 의미한다.
이를 사용하지 않으면 서버와의 통신이 불가능 할 것이다.
또한 사이드이펙트가 커지게 된다.
ex) user1과 user2가 인터넷에 접속하게 된 상황.
- user 1 : 인터넷 접속 시간 = 100초 후 접속 가능.
- user 2 : 인터넷 접속 시간 = 5초후 접속 가능.
user 1 - user 2의 순서로 접속 했을 때, 동기처리가 실행된다면 user2는 user1의 인터넷이 접속될 때까지 100초를 기다려야 한다.
= 비효율적인 프로그래밍 처리가 될 것이다.
만약 비동기 처리를 이용한다면 = > 병렬적으로도 프로그래밍 처리가 가능하므로, user2는 5초후 인터넷에 접속할 수 있다.
이것이 비동기처리가 필요한 이유다.
ex) ajax, callback, promise, seTimeout, async/await 등
++ 구체적인 비동기 처리 방식은 다음 게시물에 올리겠다.
'개발 개념 살펴보기_' 카테고리의 다른 글
LifeCycle API (0) | 2020.03.17 |
---|---|
자료구조(Data structure) 파악하기 (0) | 2020.03.08 |
명령형(Imperative)언어와 선언형(Declarative)언어 (0) | 2020.02.26 |