간략히 설명하면 작업 처리의 흐름을 정의하는 방식이다.
둘의 가장 큰 차이는 호출되는 함수의 작업완료 여부를 확인하는지 여부의 차이인데
각 방식 별 자세한 설명은 아래에 추가로 작성되어있다.
동기는 처리되는 작업의 요청과 결과가 한 자리에서 발생하며 현재 처리되고 있는
작업의 요청이 모두 완료되고 응답을 리턴한 후 다음 작업을 처리할 수 있다.
함수 A가 B를 호출한 뒤, 함수 B의 리턴 값을 지속적으로 확인하는 것이다.
비동기는 호출하는 함수가 호출된 함수의 작업완료 여부를 관여하지 않고 함수는 함수를 호출할 때 callback 함수를 같이 전달하고 작업이 완료되었을 시 callback 함수가 실행된다.
함수 A가 B를 호출할 때 callback 함수를 같이 전달해서 B의 작업이 완료되면
함께 보냈던 callback 함수를 실행한다.
동기 방식과의 차이점은 A가 B를 호출한 후 B의 완료 여부에 신경쓰지 않는다.
블로킹과 논블로킹은 호출된 함수의 제어권과 관련이 있다.
(자세한 설명은 아래로 스크롤 시 볼 수 있다...)
블로킹은 A 함수가 B 함수를 호출하면 A가 호출한 B에게 제어권을 넘겨준다.
논 블로킹은 함수 A가 B를 호출해도 제어권을 그대로 갖는다.
작업 완료까지 대기하지 않고 즉시 다음 작업을 수행하고 결과를 나중에
확인하거나 callback을 통해 처리하며 다른 작업을 동시에 수행할 수 있다.
이러한 차이로 인해 논블로킹 방식은 블로킹 방식보다
시스템의 자원을 더 효율적으로 활용할 수 있다는 장점이 있다.
동기 : 함수 A는 제어권을 B에게 넘겨준다.(리턴 값 지속적 확인)
블로킹 : 함수 B가 실행을 완료하면 리턴 값과 제어권이 반환될 때까지 대기한다.
논블로킹 :
함수 A는 B를 호출하고 제어권은 그대로 가진 상태에서 자신의 코드를 계속 실행한다.
동기 : 함수 A가 제어권을 그대로 갖고 있지만 B의 리턴 값이 필요하기 때문에
작업중 지속적으로 함수 B에게 함수 실행 완료 여부를 질의한다.
즉 논블로킹이라 타 함수를 호출하더라도 제어권을 소유한 상태에서 본인의 코드를
계속 실행하지만 동기 방식이라 B 함수의 리턴 값이 필요해 B에게 작업이 완료 되었는지
집요하게 계속 물어본다. (논블로킹인 동시에 동기인 방식)
비동기 : A는 B의 리턴 값에 관여하지 않고 콜백함수를 보낸다.
블로킹 : B의 작업에는 관여하지 않지만 A는 B에게 제어권을 넘겨준다.
결과적으로 A는 자신과 관련이 없는 B의 작업이 끝날 때까지 기다려야 한다.
논블로킹 :
A는 B를 호출하고 제어권은 넘기지 않으며 B를 호출한 뒤에도 계속 실행된다.
비동기 : B를 호출할 때 콜백함수를 함께 주고
B 함수의 작업이 종료될 시 A 함수가 넘겨준 콜백 함수를 실행한다.