Java - Blocking IO, Non Blocking IO, Sync, Async


블로킹/논블로킹 & 동기/비동기 구분

  • 이 두 개념은 확실히 알 필요가 있다.

  • 동기/비동기 와 블로킹/논블로킹 이 두 개념은 표현 형태는 비슷해 보일지라도, 서로 다른 차원에서 작업의 수행 방식을 설명하는 개념이다.

  • 동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이고,

  • 블로킹/논블록킹은 단어 그대로 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점이다.

  • 예를 들면, A 가 카페에서 커피를 시켰다

    • 커피가 나올 때까지 앞에서 기다리고, 커피가 나온 다음에 쿠키를 시키고, 또 쿠키가 나올 때까지 기다리는 건 Blocking 이다.

    • 커피를 시키고, 쿠키를 시킨 다음, 자리에 가서 앉아서 노트북으로 다른 업무를 보는 건 Non-Blocking 이다.

    • 커피를 시키고, 쿠키도 바로 같이 시켰는데.. 커피는 15분이 걸리고, 쿠키는 5분이 걸리더라도 커피를 먼저 시켰으므로 커피가 먼저 나오는 걸 Sync 라고 한다.

    • 커피를 시키고, 쿠키도 바로 같이 시켰을 때, 먼저 준비되는 대로 가져다 주는 것을 Async 라고 한다.


비동기의 이점

  • 요청한 작업에 대하여 완료 여부를 신경쓰지 않고 자신의 그다음 작업을 수행한다는 것은,

  • I/O 작업과 같은 느린 작업이 발생할 때, 기다리지 않고 다른 작업을 처리하면서 동시에 처리하여 멀티 작업을 진행할수 있기 때문이다.

  • 이는 전반적인 시스템 성능 향상에 도움을 줄 수 있다.


조합

  • Sync Blocking (동기 + 블로킹)

    • 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고 (Blocking), 다른 작업의 완료 여부를 바로 받아 순차적으로 처리하는 (Sync) 방식이다.

    • 다른 작업의 결과가 자신의 작업에 영향을 주는 경우에 활용할 수 있다.

    • 안정성은 보장되지만, 성능은 매우 떨어진다.

    • 예를들면,

      • 팀장이 A에게 일을 시킨다.

      • 완료될 때까지 가만히 기다린다.

      • A가 완료하고 팀장에게 결과물을 보고한다.

      • 팀장이 확인한다.

      • 팀장이 B에게 일을 시킨다.

      • 완료될 때까지 가만히 기다린다.

      • B가 완료하고 팀장에게 결과물을 보고한다.

      • 팀장이 확인한다.

  • Async Blocking (비동기 + 블로킹)

    • Async Blocking 조합은 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는 (Blocking),

    • 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는 (Async) 방식이다.

    • 실무에서는 잘 마주하지 않는 유형이다.

    • 안티 패턴 취급 당하는 패턴이다.

  • Sync Non-Blocking (동기 + 논블로킹)

    • Sync Non-Blocking 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 (Non Blocking),

    • 다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행 하는 (Sync) 방식이다.

    • 동작하려는 작업은 순서가 중요한데, 이걸 해놓고 넘어가려는 다른 일은 이 작업과 무관한 경우에 좋다.

    • 안정성도 어느정도 요구되며, 성능도 블로킹보다는 좋다.

    • 예를 들면,

      • 팀장이 팀원 A, B, C 에게 일을 시켜야 한다. 그런데 이 일은 A 가 완료해야 B가 가능하고, B가 완료해야 C가 가능한 업무이다.

      • 팀장이 A에게 일을 시키고, 자기 자리에 가서 다른 일을 한다.

      • A가 완료 보고를 한다.

      • 팀장이 B에게 일을 시키고, 자기 자리에 가서 다른 일을 한다.

      • B가 완료 보고를 한다.

      • 팀장이 C에게 일을 시키고, 자기 자리에 가서 다른 일을 한다.

      • C가 완료 보고를 한다.

  • Async Non-Blocking (비동기 + 논블로킹)

    • Async Non Blocking 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 (Non Blocking), 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않는 (Async) 방식이다.

    • 다른 작업의 결과가 자신의 작업에 영향을 주지 않은 경우에 활용할 수 있다.

    • 예를 들면,

      • 팀장이 팀원 A, B, C 에게 업무 지시를 한다.

      • 자기 자리에 앉아 팀장의 업무를 본다.

      • A, B, C 사원은 업무 지시를 받은 순서에 상관 없이 완료되는대로 팀장에게 보고한다.






results matching ""

    No results matching ""