불순분자 OS - 동기와 비동기 & 블로킹과 논블로킹

불순분자들·2022년 7월 24일
0

OS

목록 보기
8/12

Synchronous( 동기 ) & Asynchronous( 비동기 )

동기와 비동기를 나누는 관점은 처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인지에 대한 내용이다.
흐름 즉, 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라 함수 실행/리턴이 순차적인지 아닌지에 관점을 두고 있다.

  • Synchronous( 동기 ) : 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작.

  • Asynchronous( 비동기 ) : 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않는다.

Synchronous( 동기 )

  • 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다.
  • A함수에서 B함수를 요청하면, 호출된 B함수의 리턴 값을 상시로 확인한다.
  • 작업이 완료 되는지의 여부를 수시로 확인한다.

Asynchronous( 비동기 )

  • 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다.
  • 함수를 호출하는 곳에서 결과를 기다리지 않으며, 다른 함수( CallBack )에서 결과를 처리한다.
  • 작업 완료 여부를 확인하지 않는다.

Blocking & Non-Blocking

블로킹과 논블로킹을 나누는 관점은 처리되어야 하는 하나의 작업이 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점이다.
즉, 제어권이 누구한테 있냐가 관심사이다.

  • Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것.

  • Non-Blocking : 다른 주체의 작업에 관련이 없이 자신의 작업을 하는 것.

  • 제어권 : 함수의 코드를 실행 할 권리 같은 것으로, 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.

Blocking


A함수가 B함수를 호출하면, 제어권을 A가 호출한 B함수에 넘겨준다.

  • 제어권이 호출된 함수에게 넘어가면서 호출된 함수 내에서 작업이 모두 끝난 후, 호출한 함수에게 다시 제어권이 넘어온다.
  • 작업이 완료된 후 새로운 작업을 수행할 수 있다.

Non-Blocking


A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.

  • 제어권이 계속 호출한 함수에 있기 때문에 작업의 완료여부와 관계없이 새로운 작업을 수행할 수 있는 특징을 갖고 있다.

Synchronous( 동기 ) + Blocking

  • 가장 많이 쓰이는 조합 중 하나이다.
  • 모든 실행과 흐름이 순차적이기 때문에 개발자가 프로그램을 제어하기 쉽다.
  • 블로킹 방식으로 하위 프로세스의 작업이 완료되지 않으면 상위 프로세스는 다른 작업을 할 수 없다.

Synchronous( 동기 ) + Non-Blocking

  • 동기 방식으로 상위 프로세스는 하위 프로세스의 작업 완료 여부에 신경을 쓴다.
  • 논블로킹 방식으로 작업 완료 여부와 상관없이 상위 프로세스는 다른 작업을 할 수 있다.

Asynchronous( 비동기 ) + Non-Blocking

  • 가장 많이 쓰이는 조합 중 하나이다.
  • 성능과 자원의 효율면에서 가장 우수하다.
  • 상위 프로세스는 하위 프로세스의 작업 완료 여부를 신경쓰지 않는다.
  • 하위 프로세스의 작업 완료 여부와 관계 없이 상위 프로세스는 다른 작업을 할 수 있다.

Asynchronous( 비동기 ) + Blocking

  • 상위 프로세스는 하위 프로세스의 작업 완료 여부를 신경쓰지 않는다.
  • 블로킹 방식이므로 하위 프로세스의 작업이 완료되지 않으면 상위 프로세스는 다른 작업을 할 수 없다.
profile
장래희망 : 침대 위 녹아든 치즈

0개의 댓글

관련 채용 정보