동기와 비동기

codakcodak·2023년 5월 1일
0

동기(sync)

정의:작성된 순서대로 실행되는 것

예시코드

import time

def delivery(name,mealtime):
    print(f"{name}에게 배달완료!")
    time.sleep(mealtime)
    print(f"{name}식사 완료, {mealtime}시간 소요...")
    print(f"{name}그릇수거 완료")

def main():
    #A라는 사람은 음식을 3초동안 먹는다.
    delivery("A",5)
    #B라는 사람은 음식을 4초동안 먹는다.
    delivery("B",4)
    #C라는 사람은 음식을 5초동안 먹는다.
    delivery("C",3)
    
if __name__=="__main__":
    start = time.time()
    result=main()
    print("실행시간 :", time.time() - start,"seconds")
$ python sync_delivery.py
A에게 배달완료!
A식사 완료, 5시간 소요...
A그릇수거 완료
B에게 배달완료!
B식사 완료, 4시간 소요...
B그릇수거 완료
C에게 배달완료!
C식사 완료, 3시간 소요...
C그릇수거 완료
실행시간 : 12.031441926956177 seconds

작성된 순서 드대로 즉,delivery("A",5),delivery("B",4),delivery("C",3)라는 함수가 순서대로 실행되었기에 동기적으로 실행되었다고 할 수 있다.

비동기(async)

정의:작성된 순서 그대로 실행되는 것이 아닌 것

예시코드

import time
import asyncio

async def delivery(name,mealtime):
    print(f"{name}에게 배달완료!")
    await asyncio.sleep(mealtime)
    print(f"{name}식사 완료, {mealtime}시간 소요...")
    print(f"{name}그릇수거 완료")

async def main():
    await asyncio.gather(
        delivery("A",5),
        delivery("B",4),
        delivery("C",3)
    )
    
if __name__=="__main__":
    start = time.time()
    asyncio.run(main())
    print("실행시간 :", time.time() - start,"seconds")
$ python async_delivery.py
A에게 배달완료!
B에게 배달완료!
C에게 배달완료!
C식사 완료, 3시간 소요...
C그릇수거 완료
B식사 완료, 4시간 소요...
B그릇수거 완료
A식사 완료, 5시간 소요...
A그릇수거 완료
실행시간 : 5.001014947891235 seconds

delivery("A",5),delivery("B",4),delivery("C",3)라는 함수들의 실행순서가 보장이 되지 않고있다.한 사람의 식사시간이 끝나야만 배달을 가는 순차적인 행동을 없애 프로그램 자체의 실행시간을 줄였다고 볼 수 있다.

한계:순서가 보장되지 않는다는 것은 코드에서 제어하기 힘들다는 것을 의미한다.수학적 연산이나 딥러닝등의 분야에서는 연산의 순서가 중요하기에 비동기로 작성하기에는 적합하지 않다.이처럼 자신의 목적에 맞게 유동적으로 방식을 선택하는 것이 중요하다.

profile
숲을 보는 코더

0개의 댓글