코드 실행 시 실행이 지연되는 현상이 발생하고는 합니다. 이런 현상을 "블로킹"이라고 부릅니다. 프로그램을 최적화하거나 성능을 개선하려면 블로킹의 원인이 CPU 바운드인지 I/O 바운드인지 파악하여 적합한 방법으로 개선 작업을 진행하는 것이 중요합니다.
CPU 바운드
CPU 바운드 상태에서는 프로그램이 다른 자원들보다 CPU 연산에 더 많은 시간을 소비합니다. 이는 프로그램이 수행해야 할 연산이 많고 복잡하거나, 데이터 처리가 많이 필요한 경우에 발생할 수 있습니다. 이러한 경우에는 CPU가 연산을 처리하기 위해 많은 시간과 노력을 필요로 하기 때문에 전체적인 성능이 저하될 수 있습니다.
아래 코드를 실행하면, 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)
I/O 바운드
I는 Input을 의미하고, O는 Output을 의미하는데, I/O 바운드는 CPU 성능보다는 입출력(예: 디스크 또는 네트워크) 작업이 제한적인 상황을 말합니다. 이러한 경우에는 프로그램이 데이터를 읽고 쓰는 데 시간이 더 많이 소요되며, CPU는 상대적으로 덜 사용됩니다.
아래는 코드 실행 시에, 사용자가 값을 입력할 때까지 지연됩니다. 이럴 때 I/O 바운드가 발생하는데, 상황에 따라서 사용자가 아니라 네트워크로 인한 지연이 될 수도 있습니다.
def io_bound_func():
print("값을 입력해주세요")
input_value = input()
return int(input_value) + 100
if __name__ == "__main__":
result = io_bound_func()
print(result)
네트워크 지연 예시
import requests
import time
def io_bound_func():
result = requests.get("https://google.com")
return result
if __name__ == "__main__":
start_time = time.time()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
result = io_bound_func()
print(time.time() - start_time)
pass
결과 > 3.0890870094299316초
'computer science' 카테고리의 다른 글
코루틴 (0) | 2023.08.03 |
---|---|
동기와 비동기 (0) | 2023.08.02 |
[#혼공] 혼자 공부하는 컴퓨터 구조+운영체제 [Chapter.08] (0) | 2023.07.23 |
[#혼공] 혼자 공부하는 컴퓨터 구조+운영체제 [Chapter.07] (0) | 2023.07.23 |
[#혼공] 혼자 공부하는 컴퓨터 구조+운영체제 [Chapter.06] (0) | 2023.07.22 |