웹개발

동기식 프로그램 비동기식 프로그램 ,블럭 논블럭 비교

작취 2023. 12. 3. 21:55
반응형

보통 블럭(Blocking)과 동기(Synchronous)가 다른 개념이고 논블럭(Non-Blocking)과 비동기(Asynchoronous)가 다른 개념이라는 것을 먼저 이해하고 시작해야한다.


동기식 프로그램이란?

 

  • 특징 : 요청과 응답이 동시에 일어남. 즉, 요청에 대한 응답이 나올때까지 기다렸다가 다음 요청을 수행한다.
  • 장점 : 설계가 간단하고 직관적이다.
  • 단점 : 요청에 대한 결과가 반환되기까지 기다려야 하므로 웹페이지의 속도와 성능이 저하될 수 있다. UX가 불편하다
  • 예시 코드
import time

# 동기 프로그래밍
def sync_task(n):
    print(f"----요청사항 {n} 시작----")
    for i in range(1,n+1):
        print(f"{i}/{n} 진행중")
        time.sleep(1)
    print(f"----요청사항 {n} 처리 완료----")
    
def sync_time():
    start = time.time()
    sync_task(2)
    sync_task(3)
    sync_task(4)
    end = time.time()
    print(f">>>>동기식 프로그램 총 소요 시간: {end-start}")

sync_time()

---------------------------------------------------------------

----요청사항 2 시작----
1/2 진행중
2/2 진행중
----요청사항 2 처리 완료----
----요청사항 3 시작----
1/3 진행중
2/3 진행중
3/3 진행중
----요청사항 3 처리 완료----
----요청사항 4 시작----
1/4 진행중
2/4 진행중
3/4 진행중
4/4 진행중
----요청사항 4 처리 완료----
>>>>동기식 프로그램 총 소요 시간: 9.001139402389526
  • 실생활 예시
손님 : 커피를 주문
직원 : 커피만드는중
손님 : 커피만드는거 앞에서 기다리는중
직원 : 커피완성
손님 : 커피를 받고 자리에 가서 다음 할일 (유튜브 시청)을 함

비동기식 프로그램이란?

  • 특징 : 비동기식 처리 모델은 동기식 처리 모델과는 반대로 데이터의 요청과 결과가 동시에 일어나지 않음. 서버에게 데이터 요청 후에도 다른 활동 수행이 가능하다.
  • 장점 : 웹페이지의 수행 성능을 향상시킬수 있다. UX적인 측면에서 유리하다. 여러작업을 동시에 수행할 수 있다.
  • 단점 : 코드의 복잡도가 증가하여 구현과 에러처리가 동기에 비해 힘들다.
  • 예시코드
import time
import asyncio

# 비동기 프로그래밍
async def async_task(n):
    print(f"----요청사항 {n} 시작----")
    for i in range(1,n+1):
        print(f"{i}/{n} 진행중")
        await asyncio.sleep(1)
    print(f"----요청사항 {n} 처리 완료----")
    
async def async_time():
    start = time.time()
    task1 = asyncio.create_task(async_task(2))
    task2 = asyncio.create_task(async_task(3))
    task3 = asyncio.create_task(async_task(4))
    await task1
    await task2
    await task3
    end = time.time()
    print(f">>>>비동기식 프로그램 총 소요 시간: {end-start}")

asyncio.run(async_time())

--------------------------------------------------------------------

----요청사항 2 시작----
1/2 진행중
----요청사항 3 시작----
1/3 진행중
----요청사항 4 시작----
1/4 진행중
2/2 진행중
2/3 진행중
2/4 진행중
----요청사항 2 처리 완료----
3/3 진행중
3/4 진행중
----요청사항 3 처리 완료----
4/4 진행중
----요청사항 4 처리 완료----
>>>>비동기식 프로그램 총 소요 시간: 4.00504732131958
  • 실생활 예시
손님 : 커피를 주문
직원 : 커피만드는중
손님 : 자리에가서 유튜브시청이나 다른 작업을 수행함
직원 : 커피완성
손님 : 커피를 받아오고 하던작업 마저 수행

Block/Non-block이란?

동기/비동기프로그램은 추상적인 개념을 말하지만 Block/Non-block은 기술적인 개념을 말한다.

종류 예시
블럭(Block) - 함수A가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로
   return하지 않는 경우
- 함수 A가 로직을 마치기 전까지 함수 B는 실행되지 않는다.
논블럭(Non-block) - 함수 A가 자신릐 로직을 마치기 전에 함수 B가 실행 가능하다

 

동기/비동기와 블록/논블록은 비슷한듯 하지만 다른 개념이다.

기술적, 함수호출부분에서는 블록/논블럭이 맞다

헷갈릴 수 있으니까 확실하게 개념을 공부해둘것!

 

반응형

'웹개발' 카테고리의 다른 글

세션 로그인, jwt 로그인 정  (0) 2024.01.07
Access token & Refresh token 파헤치기  (0) 2023.12.26