blocking I/O ?

About_work·2024년 7월 12일
0

cs 기초

목록 보기
35/38
  • I/O 작업

    • 파일 시스템에서의 파일 읽기/쓰기,
    • 네트워크 소켓을 통한 데이터 송수신,
    • 사용자 입력 대기
  • 블로킹 I/O는

    • 프로그래밍에서 입출력 작업(I/O 작업)을 수행할 때
    • 해당 작업이 완료될 때까지 프로그램의 실행을 멈추는 것을 의미
  • 즉, 블로킹 I/O 호출은

    • 호출한 함수가 반환되기 전에 작업이 완료될 때까지
    • 현재 실행 중인 스레드가 대기 상태로 머무르는 방식

블로킹 I/O의 예시 코드

다음은 파이썬에서 파일을 읽는 블로킹 I/O 예시입니다:

with open('example.txt', 'r') as file:
    data = file.read()  # 이 호출은 파일이 모두 읽힐 때까지 블로킹됨
print("File reading is done.")

위 코드에서 file.read()는 파일의 모든 내용을 읽을 때까지 현재 스레드를 블로킹합니다. 파일 읽기가 완료되기 전까지는 print("File reading is done.") 라인이 실행되지 않습니다.

비블로킹 I/O와의 비교

  • 비블로킹 I/O는 I/O 작업이 완료될 때까지 기다리지 않고,
    • 작업이 즉시 완료되지 않으면 에러를 반환하거나 다른 방법으로 처리합니다.
  • 비블로킹 I/O는 이벤트 루프콜백, 비동기 프로그래밍을 통해 주로 구현

비동기 I/O 예시 (비블로킹 I/O)

파이썬에서는 asyncio 모듈을 사용하여 비동기 I/O를 구현할 수 있습니다:

import asyncio

async def read_file_async(filename):
    loop = asyncio.get_event_loop()
    with open(filename, 'r') as file:
        data = await loop.run_in_executor(None, file.read)  # 비동기로 파일 읽기
    print("File reading is done.")
    return data

asyncio.run(read_file_async('example.txt'))
  • 이 예시에서는 await 키워드를 사용하여 파일을 비동기로 읽습니다.
  • 이는 I/O 작업을 기다리는 동안 다른 작업을 수행할 수 있게 합니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글