ETC/Software Development Methodology

블로킹(Blocking), 논블로킹(Non-blocking)에 대해

범데이 2023. 9. 4. 00:24
728x90

블로킹과 논블로킹은 프로그래밍에서 자주 사용되는 두 가지 동작 모델 또는 방식을 나타낸다. 이 두 개념은 주로 입출력(IO) 작업, 네트워킹, 멀티스레딩 등과 관련이 있으며, 어떻게 코드가 실행되고 제어가 처리되는지에 영향을 미친다. 아래에서 각 개념을 상세히 살펴보자.

 

 

 

1. 블로킹(Blocking)

블로킹은 어떤 작업이 완료될 때까지 프로그램이 다음 작업으로 진행하지 않고 대기하는 동작 방식을 의미한다. 주로 입출력 작업에서 발생하며, 예를 들어 파일을 읽거나 네트워크에서 데이터를 받아올 때 블로킹 작업이 발생할 수 있다. 블로킹 호출을 하면 해당 호출이 완료 될 때까지 제어가 호출한 코드에 반환되지 않는다. 이는 다른 작업들도 대기 상태에 놓이게 하고, 전반적으로 프로그램의 응답성을 저하시킬 수 있다.

 

예를 들어, 다음과 같은 블로킹 코드를 고려해보자:

data = read_file_blocking("file.txt")  # 파일 읽기 작업이 완료될 때까지 대기
process_data(data)

위 코드에서 'read_file_blocking' 함수가 완료되기 전까지 'process_data'함수로 제어가 이동하지 않는다.

 

 

 

 

2. 논블로킹(Non-blocking)

논블로킹은 어떤 작업을 실행하고 그 결과를 기다리지 않고 다른 작업을 실행하는 동작 방식을 의미한다. 논블로킹 작업을 수행할 때, 작업이 완료되지 않았더라도 제어는 다른 코드로 넘어가서 실행된다. 이는 주로 비동기적인 작업에서 활용되며, 다른 작업과 병렬로 처리할 때 유용하다. 논블로킹 방식을 사용하면 프로그램이 더 빠르게 실행될 수 있고, 블로킹 작업으로 인한 대기 시간을 최소화할 수 있다.

 

예를 들어, 논블로킹 코드는 다음과 같을 수 있다:

# 파일 읽기 작업을 논블로킹으로 수행
file_handle = open_file_non_blocking("file.txt")
# 다른 작업을 실행할 수 있음
result = do_other_work()
# 파일 읽기 작업이 완료될 때까지 기다리지 않고 다른 작업 수행
data = read_file_non_blocking(file_handle)

 

 

위 코드에서 'open_file_non_blocking' 및 'read_file_non_blocking'함수는 파일 작업을 논블로킹으로 처리하므로 다른 작업과 병렬로 실행할 수 있다.

 

블로킹과 논블로킹은 어떤 상황에서 적절한지에 따라 선택되어야 하며, 프로그램의 성능 및 응답성을 고려하여 적절한 방식을 채택해야 한다.

 

 

 

 

3. 동기/비동기 개념과의 차이

블로킹/논블로킹은 작업이 완료되기를 기다리는지 여부를 설명하고, 동기/비동기는 작업의 실행 및 제어 방식을 설명한다. 블로킹과 동기는 작업의 순서와 제어를 강조하며, 논블로킹과 비동기는 병렬 실행과 응답성을 강조한다.

 

그러나 주의할 점은 모든 동기 작업이 블로킹되는 것은 아니며, 모든 비동기 작업이 논블로킹되는 것도 아니다. 예를 들어, 동기적인 방식으로 작업을 수행하더라도 해당 작업이 빠르게 완료되면 블로킹이 거의 느껴지지 않을 수 있다. 마찬가지로, 비동기 작업 중에도 작업의 완료를 기다리는 코드를 작성할 수 있으므로 블로킹이 발생할 수 있다. 그러나 일반적으로 동기 작업과 비동기 작업은 위에 설명한 방식으로 동작한다.

 

 


#References

https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

https://jaehoney.tistory.com/242

 

반응형