CPU bound | I/O bound |
---|---|
프로그램이 cpu 연산때문에 막히는 것 | 프로그램이 I/O 때문에 막히는 것 |
CPU 바운드는 프로그램이 실행될 때 실행속도가 CPU속도에 의해 제한되는 것을 말한다. 예를들어 양자역학을 계산하거나, 머신러닝 코드에서 행렬계산을 할 때 그런 코드들이 bound가 걸린다.
즉, cpu가 연산을 너무 많이 해서 프로그램 실행을 막는 것을 의미한다.
def cpu_bound_func(number: int):
total = 1
arrange = range(1,number+1)
for i in arrange:
for j in arrange:
for k in arrange:
total *= i*j*k
return total
if __name__ =="__main__":
result = cpu_bound_func(100)
print(result)
cpu_bound_func(100)은 cpu bound가 걸려서 실행되지 않는다.
cpu_bound_func(30)로 값을 변경하면 프로그램이 실행된다.
여기서 I는 input을 의미하고 O는 output을 의미한다.
사용자가 입력을 하고 해당하는 입력에 대해 더하기 100을 한 결과값을 출력해주는 프로그램을 개발한다고 가정할 때,
def io_bound_func():
print("값을 입력해주세요")
input_value = input()
return int(input_value) + 100
if __name__ == "__main__":
result = io_bound_func()
print(result)
사용자가 입력을 100초 후에 숫자 15를 입력하면 115가 약 100초 후에 출력된다.
사용자가 키보드로 숫자를 입력하는 경우뿐만 아니라, 컴퓨터와 컴퓨터끼리
통신을 할 때에도 I/O bound가 발생한다 → 네트워크 I/O 라고도 한다.
import requests
def io_bound_func():
result = requests.get("https://google.com")
return result
if __name__ == "__main__":
for i in range(10):
result = io_bound_func()
print(result)
요청 보내고 응답까지 기다림.
이 과정에서 CPU는 연산하지 않는다.
응답이 오면 다음 코드를 실행
이 코드가 반복되어 시간이 누적되기에 시간이 오래걸린다.
CPU bound, I/O bound, memory bound 등 bound에 의해서 코드가 멈추게 되는 현상을 Blocking(블로킹)이라 한다.