본문 바로가기

개발 개념 살펴보기_

동기와(Synchronous) 비동기(Asynchronous)

동기(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 등

 

++ 구체적인 비동기 처리 방식은 다음 게시물에 올리겠다.