동기 & 비동기, 블로킹 & 논블로킹

  • 동기
    • 서비스처리가 완료된 이후에 처리 결과를 확인하는 방식을 동기식 호출(결과가 올때까지 대기해야함)
  • 비동기
    • 서비스처리가 완료되기전에 우선 응답을 전달하는 방식(대기하는것을 방지)
  • 블로킹
    • 요청한 작업이 성공하거나 에러가 발생하기 전까지는 응답을 돌려주지않는 것을 의미 (ServerSocket, Socket 클래스)

“Blocking” means that the caller waits until the callee finishes its processing.

  • 논블로킹
    • 요청한 작업의 성공여부와 상관없이 바로 결과를 돌려줌 (ServerSocketChannel, SocketChannel 클래스)

왜 Block IO보다 NonBlock IO가 느릴까?

Block I/O

Pasted image 20231105204457

  • 데이터가 커널로 들어오면 데이터가 바로 커널스페이스에서 유저스페이스로 이동함

Non Block I/O

  • 방법이 2가지 있음

데이터가 들어왔는지 반복해서 확인

Pasted image 20231105204700

  • 우선 반복적으로 확인하기 때문에 cpu 자원낭비가 됨
  • 데이터가 들어온시점과 반복적으로 확인한 시점 사이에 시간차가 발생할 수 밖에 없기 때문에 Block I/O보다 느림

데이터가 들어오면 알려 줌

Pasted image 20231105205052

  • 데이터가 들어오면 커널에서 알려줌
  • 알려주면 쓰레드에서 read syscall을 날려서 데이터를 읽음
  • 커널에서 데이터가 들어온걸 알려주고, 쓰레드가 확인해서 해당 데이터를 가져오기 까지 시간 텀이 발생함

https://www.youtube.com/watch?v=mb-QHxVfmcs&t=757s
https://nesoy.github.io/articles/2017-01/Synchronized
https://d2.naver.com/helloworld/47667

#Non-Blocking-IO

Hugo로 만듦
JimmyStack 테마 사용 중