- 동기
- 서비스처리가 완료된 이후에 처리 결과를 확인하는 방식을 동기식 호출(결과가 올때까지 대기해야함)
- 비동기
- 서비스처리가 완료되기전에 우선 응답을 전달하는 방식(대기하는것을 방지)
- 블로킹
- 요청한 작업이 성공하거나 에러가 발생하기 전까지는 응답을 돌려주지않는 것을 의미 (ServerSocket, Socket 클래스)
“Blocking” means that the caller waits until the callee finishes its processing.
- 논블로킹
- 요청한 작업의 성공여부와 상관없이 바로 결과를 돌려줌 (ServerSocketChannel, SocketChannel 클래스)
왜 Block IO보다 NonBlock IO가 느릴까?
Block I/O
- 데이터가 커널로 들어오면 데이터가 바로 커널스페이스에서 유저스페이스로 이동함
Non Block I/O
- 방법이 2가지 있음
데이터가 들어왔는지 반복해서 확인
- 우선 반복적으로 확인하기 때문에 cpu 자원낭비가 됨
- 데이터가 들어온시점과 반복적으로 확인한 시점 사이에 시간차가 발생할 수 밖에 없기 때문에 Block I/O보다 느림
데이터가 들어오면 알려 줌
- 데이터가 들어오면 커널에서 알려줌
- 알려주면 쓰레드에서 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