https://www.youtube.com/watch?v=oEIoqGd-Sns 

목차

  • 1. Blocking vsNon-Blocking
  • 2. Synchronous vs Asynchronous
  • 3. 조합 4가지의 경우
  • 4. 정리

1. Blocking vsNon-Blocking

  • Blocking : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날떄까지 기다렸다가 자신의 작업을 시작하는것이다.
  • Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것이다.
  • Blcoking을 예시와 함꼐 이해해보자.
    • Application1이 처음에는 자신이 작업을 한다.
    • 그러다 다른 작업이 작업하면 잠시 쉬다가, 다른 작업이 다시 쉬면 작업한다.
    • 어떤 직원이 있다. 서류작성을 열심히 해서 상사한테 전달해야한다.
    • Blocking 상사는 해당 서류를 읽을때까지 기다리라고한다. 그리고 그 서류를 받을떄까지 대기하다가 서류륿 받으면 다시 작업한다.
  • Non-Blocking을 예시와 함꼐 이해해보자.
    • Non-Blocking은 다른 주체와 상관없이 자신의 일을 한다., 그래서 다른 쪽에서 작업하는 순간 빠져나와서 자신의 일을 진행한다.
    • Application1 이 자신의 작업을 한다. 
    • 다른작업이 시작해도 계속해서 Application1은 계속해서 작업한다.
  • 다른 주체가 작업할때 자신의 제어권이 있는지 없는지로 볼 수 있다.
    • 자신의 제어권이 있다면 Non-Blocking
    • 자신의 제어권이 없다면 Blocking

2. Synchronous vs Asynchronous

  • Synchronous : 동기라는 뜻을 가진다. 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 작업을 시작함을 의미한다.
  • Asyncrhonous : 비동기라는 뜻을 가진다. 시작,  종료가 일치하지 않으며 끝나는 동시에 시작을 하지 않음을 의미한다.
  • Synchrnous  예시와 함꼐 이해해보자. 
    • 끝남과 동시에 시작한다는 내용이 있었다.
    • Application1이 자신의 작업을 하다가 다른곳에 도움을 요청했다.  App1은 이때 다른작업을 할 수도 있다.
    • 다른곳에서 데이터를 처리한뒤 App1 에 다시 가져다준다.
    • 그리고 App1은 그 데이터를 받은뒤 작업을 계속한다.
  • Asynchrnous 예시와 함께 이해해보자.
    • App1이 작업을 수행하다가 Kernel에 도움을 요청한다.
    • App1은 그 도움을 을 받은 요청을 기다리는동안 다른일을 한다. 
    • 그리고 그 도움을 받은뒤 그 일을 계속해서 할수도있고 다른일을 해도된다.
    • Asynchrnous 상사는 다른일을하거나 도움을 받은일을 바로 안해도된다.
    • 이 Async 사원은 나중에 내용을 확인하고 언젠가 처리하면된다.
  • Sync와 Async의 차이점은 결과를 돌려주었을떄 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있다.
  • Sync인 경우 결과를 돌려주었을때 결과와 순서에 관심이있다.
  • Async인경우 결과를 돌려주었을때 결과에 순서에 관심이 없다.

3. 조합 4가지의 경우

 

  Blocking Non-Blocking
Sync Blocking / Sync Non-Blocking / Sync
Async Blocking / ASync Non-Blocking / ASync
  • Blocking / Sync
    • Blocking의 관점은 제어권에 있었다. 그래서 다른 작업이 시작되는 동안 동작하지 않는다.
    • Sync의 관점은 결과의 처리다. 따라서 결과를 반환하면 해당 업무를 바로 처리하게 된다.
    • 사원이 Blocking Sync 상사에게 서류를 전달한다.
    • Blocking Sync 사원은 해당 사원에게 작업을 할떄까지 기다리라고한다.
    • 다 읽고 나서 사원에게 전달하면 사원은 해당 업무를 Sync로 바로 처리한다.
    • Blocking / Sync는 자바에서 입력요청을 할때 Blocking / Sync를 사용한다.
    • 제어권이 넘어갔기 떄문에 입력이 될떄까지 로직이 멈춘다. 즉, 제어권과 결과를 같이 받아서 처리한다.
  • Non-Blocking / Sync
    • Non-BLocking은 다른 작업이 있어도 자신의 제어권을 가지고 일을 하는것이다.
    • Sync의 관점은 결과의 처리다. 따라서 결과를 반환하면 해당 업무를 바로 처리하게 된다.
    • 그렇기에 중간중간 Kernel에 App1이 계속해서 작업이 끝났는지 확인한다.
    • Non-Blocking Sync 상사에게 서류를 전달한다.
    • Non-BLocking Sync 상사는 사원에게 다른 작업을 하라고 한다.
    • 사원은 강박이 생겨서 바로바로 일을 처리한다고 강박이 생겨서 중간중간 계속해서 상사에게 일처리가 끝났는지 계속해서 물어본다.
    • 사원은 다시 자신의 업무를 보다가 다시 상사에게 다시 물어본다.. 이것을 반복하낟.
    • 그리고 상사가 일을 전달해주면 사원은 해당 결과를 가지고 바로 처리한다.
    • Blocking/Sync와 큰차이는 없지만, 사용되는 지점은 게임에서 맵을 넘어갈때를 예시로 든다.
    • 해당 데이터를 가져올떄까지 유저에게 정보의 로드율이 얼마인지만큼 보여줄때가 있다.
  • Blocking / Async
    • Blocking의 관점은 제어권에 있다. 자신의 작업에 대한 제어권이 없다.
    • Async이기 떄문에 결과를 바로 처리하지 않아도된다.
    • 이 조합은 굳이 비동기인데 Blocking을 써야할까라는 생각이 든다.
    • 보통 Non-BLocking/Async로 하려다가 개발자의 실수로 이와 같이 동작한다고 한다.
    • 서류를 BLocking Async상사에게 전달한다. 
    • 이 상사는 옆에 사원보고 기다리라고한다. 그래서 직원은 결과에 크게 관심이 없어도 기다리고있다.
    • 일이 끝나면 Blocking Async상사는 결과를 메일로 넘겨주고 돌아가라고 한다.
    • 사원은 돌아가서 일하고 시간이 될떄 메일로 받은 일을 처리한다.
  • Non-BLcoking / Async
    • Non-Blocking 다른 작업이 시작되어도 계속해서 본인의 작업을 계속진행한다.
    • Async는 결과를 받아도 바로 처리하지않고 자기일이끝나거나 본인이 하고싶을떄 처리한다.
    • 사원이 마지막 서류를 Non-Blocking Async상사에게 전달한다.
    • Non-BLocking이기에 상사는 사원에게 자신의 일을 하라고한다.
    • 상사는 일을 다 처리한뒤 Async이기에 사원에게 전달하고, 사원은 나중에 처리한다.
    • 자바스크립트에서 API요청을 하고 다른 작업을 하다가 콜백을 통해서 추가적인 작업을 처리할떄 사용하는게 대표적인 예시다.

4. 정리

  • Blocking과 Non-Blocking은 제어의 관점. 즉, 다른 작업이 작업을 할떄 계속해서 작업을 하느냐 아니면 다른 작업이 끝날떄까지 기다려야하냐의 문제이다.
  • Sync / Async 순서와 결과처리의 관점. 즉, 도움을 요청한 작업을 받았을떄 그 작업을 바로 처리해야한다면 Sync 만약 상관없이 자신의 일을 계속하다가 원할떄 해당 결과를 받아도 된다면 Async

 

+ Recent posts