Async / Non-blocking

Single Ko·2023년 12월 30일
0

java

목록 보기
28/28

동기와 비동기, 블로킹과 논블로킹에대해 알아보겠다. 둘은 비슷해 보이지만 다른 차이점이 있다.

비동기(Async)

비동기 처리란?

  • 작업을 요청하고 해당 요청에 대한 결과를 기다리지 않고 다른 작업을 수행할 수 있다.
  • 작업이 완료되면 결과를 받아 적절한 콜백이나 이벤트를 통해 처리 한다.

동기 (Sync)

동기 처리란?

  • 작업을 요청하면 해당 요청의 결과가 끝날 때까지 기다린후 다음 작업을 시작한다.
  • 요청과 결과가 순서대로 나타나며 시간이 일치한다.

Blocking

블로킹이란?

  • 이전 작업이 완료될 때까지 대기하며, 반환되기를 기다린다.
  • 함수가 반환될 때까지 프로그램의 제어가 다음 작업으로 전달되지 않는다.

Non-blocking

  • 이전 작업이 완료될 때 까지 대기하지 않고 다음 작업을 수행하는 것.
  • 함수가 반환되지 않았더라도 다른 코드를 계속해서 실행할 수 있다..

차이점은?

동기와 비동기: 백그라운드의 작업 완료 여부에 초점을 맞춘다.

블로킹과 논블로킹: 함수가 바로 return 되는지의 여부에 초점을 맞춘다.

동기/비동기는 작업 완료 여부에 대한 접근 방식을 나타내고, 블로킹/논블로킹은 함수 호출이 반환되는 방식에 초점을 두고 있다.

1) 동기적이면 결과를 기다리고
2) 블로킹이면 반환될 때까지 기다리며
3) 비동기적이면 결과를 기다리지 않고 다른 작업을 수행하며
4) 논블로킹이면 반환되지 않아도 다른 작업을 수행한다

일반적으로 동기/블로킹 , 비동기/논블로킹으로 작동한다.
동기/논블로킹, 비동기/블로킹의 흐름으로 작동 될 때도 있다.

프로그래밍 언어?

비동기적 Event기반의 언어인 Javascript를 사용한다면, 이런 방식이 더 잘 이해 될 것이다. 왜냐면 Promise나 callback, async/await등을 사용하니 말이다.

Java를 먼저 공부했고 계속 공부하고 있는 나는 처음에 비동기에대해 접하기가 너무 어려웠다. 자바는 기본적으로 동기적인 방식의 언어이고, 비동기적인 방식을 사용할 수 있지만 내가 만드는 수준의 코드에서는 사용을 해본적이 거의 없기 때문에..

다만 Javascript의 Nodejs , express, Nestjs를 공부해보니 확실히 동기/비동기에 대한 감이 잡히고, 너무 어렵게 접근할 필요가 없다는게 느껴졌다.

다양한 언어를 공부해보는 것이 도움이 된다는것을 확실히 느꼈다. 이렇게 되니 또 다른 프로그래밍 언어도 공부해 보고싶다. (방향성이 비슷한 언어 말고) C 아니면 Rust, go 같은 언어들 중에서 한번 공부해 보고 싶고, 또 함수형 언어도 한번 공부해 볼 생각이다. 천천히...

profile
공부 정리 블로그

0개의 댓글