[Fast API] CPU bound와 I/O bound

seoryeong·2023년 6월 18일
0

FastAPI

목록 보기
2/5
post-thumbnail

CPU boundI/O bound
프로그램이 cpu 연산때문에 막히는 것프로그램이 I/O 때문에 막히는 것

📝CPU bound

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/O bound

여기서 Iinput을 의미하고 Ooutput을 의미한다.

사용자가 입력을 하고 해당하는 입력에 대해 더하기 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는 연산하지 않는다.
응답이 오면 다음 코드를 실행
이 코드가 반복되어 시간이 누적되기에 시간이 오래걸린다.

📝Blocking(블로킹)

CPU bound, I/O bound, memory bound 등 bound에 의해서 코드가 멈추게 되는 현상을 Blocking(블로킹)이라 한다.

profile
파이썬 개발자입니다.

0개의 댓글