끄적이는 메모장

[끄적끄적 메모하기] Non-Blocking 본문

메모장/얕은지식

[끄적끄적 메모하기] Non-Blocking

밥보92 2020. 5. 8. 22:03
반응형

Non-Blocking ? 하나의 수행에 의해 멈춤이 발생하지 않도록 하는 방법론

 

두 가지 관점에서 볼 수 있음 

1. Non-Blocking I/O : 작업을 외부에 위임하여 특정 작업에 의해 멈추지 않고 후속 작업이 수행 될 수 있게 하는 것

2. Non-Blocking Algorithm : 공유자원을 안전한 방법으로 동시에 사용 가능하도록 하는 것 

 

# Non-Blocking I/O

- 프로세스가 블록되지 않음

- 특정 작업을 호출 직후 해당 작업의 완료를 기다리지 않고 다음 처리로 넘어감

- 만약, 해당 작업의 완료가 필요하다면 콜백 혹은 polling 등을 통해 후속 작업을 처리해줌 

*Asynchronous programming

- non-blocking i/o와 혼동하여 생각이 가능하며 주 실행흐름이 멈추지 않는 프로그램 방식인 것은 유사

- 특정 코드의 실행을 별도의 채널에 맞기는 형식으로 해당 코드의 결과는 프로그래밍 언어가 지원하는 방식으로 처리가능

(future, coroutine, task/await 등)

 

# Non-Blocking Algorithm 

- Thread의 중단 혹은 blocking없이 공유 자원에 접근이 가능하도록 하는 알고리즘 

- Thread A가 공용 자원을 사용중인 경우 Thread B가 이 자원을 사용하고자 한다면 이를 사용할 수 없음을 Thread B에 통지해줌

- 만약 Blocking Algorithm이었다면 Thread B는 Thread A가 공용 자원을 모두 사용할 때 까지 대기를 했을 것

 

- Non-Blocking Algorithm의 이점은

(1) 현재 공용 자원을 이용할 수 없는 Thread가 어떤 동작을 수행할 지 선택을 할 수 있으며

(2) 특정 자원을 사용하기 위한 대기가 없으므로 데드라을 회피할 수 있으며

(3) Thread의 정지가 발생하지 않기 때문에 컨텍스트 스위칭에 소모되는 비용이 적고

(4) 응답 지연을 감소시킬 수 있음 

 

반응형

'메모장 > 얕은지식' 카테고리의 다른 글

[끄적끄적 메모하기] GIT 명령어 정리  (0) 2020.05.08