반응형
보통 블럭(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 |