데이터 입출력 방식 : 블로킹과 동기/비동기

Eojin·2023년 11월 8일
0

작성일
20231108, 20231109



➡️ 데이터의 입출력 방식

사용자는 운영체제 즉, 커널에게 메모리 읽기 작업 요청하면, 커널은 데이터가 입력될 때까지 대기했다가 데이터가 입력되면 유저에게 커널이 결과를 전달한다. 이렇듯 데이터가 입출력되는 것을 I/O(Input/Out)이라고 부르며, 데이터의 입출력 방식을 어떻게 하느냐 따라 처리 속도 및 자원 낭비 등의 효율이 달라진다. 그러면 지금부터 차근차근 살펴보자.

✅ Non-Blocking Model

I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않는 방식이다. Non-Blocing에는 반복적으로 시스템 콜을 한다는 문제가 있는데 이를 해결하기 위해 I/O 이벤트(수신 버퍼나 출력 버퍼에 데이터를 처리하는 동작) 통지 모델이 도입되었다. 여기서 이벤트 통지방식이란, 간단히 말해서 시스템 콜을 무작정 보내기 전에 입력 버퍼에서 미리 정보를 알려주는 방식을 가리킨다.

이러한 I/O 이벤트 통지방식에는 동기/비동기 모델로 분류 가능한데, I/O 작업 상황(결과) 반환 방식에 따라 동기, 비동기 방식으로 분류되는 것이다.

(참고로 블로킹 방식에 대한 내용은 추후 공부하고 추가할 예정이다.)


✅ 동기(Synchronous)와 비동기(Asynchronous) 이란?

동기와 비동기의 차이는 실행순서에 있다. 동기식의 경우, 먼저 시작된 하나의 작업이 끝날 때까지 다른 작업을 시작하지 않고 기다렸다가 다 끝나면 새로운 작업을 시작하는 실행 즉, 작업의 순서가 있는 방식을 의미한다. 작업이 직렬로 배치되어 실행되며 작업 실행의 순서가 확실히 정해져 있다.

반면 비동기는 동기식 방식과는 다르게 먼저 시작된 작업의 완료 여부와는 상관없이 새로운 작업을 시작하는 방식이다. 작업이 병렬로 배치되어 실행되며 작업의 순서가 확실하지 않아 나중에 시작된 작업이 먼저 끝나는 경우도 발생한다.

정리하자면, 동기는 다시말해 요청을 보낸 후 해당 요청의 응답을 받아야 다음 동작을 실행하는 방식이고, 비동기는 요청을 보낸 후 응답과 관계없이 다음 동작을 실행할 수 있는 방식을 의미한다.


✅ 동기식 I/O란?

입력이나 출력을 요청한 후에 그 작업이 완료될 때까지 기다리는 방식으로, 동기식 I/O의 장점은 구현이 간단하고 직관적이라는 장점이 있지만, I/O 작업이 오래 걸리는 경우에 프로그램의 성능이 저하되고, 사용자의 응답성이 떨어질 수 있다.


✅ 비동기식 I/O란?

비동기식 I/O는 입력이나 출력을 요청한 후에 바로 다른 작업을 수행하는 방식이다. 예를 들어, 파일을 읽거나 쓰는 경우에는 파일 시스템에 접근하고 데이터를 전송하는 작업을 별도의 스레드나 프로세스에 위임하고, 메인 스레드나 프로세스는 다른 작업을 계속한다. 이때 비동기식 I/O를 사용하면 파일 작업이 완료되면 콜백 함수나 이벤트를 통해 결과를 받아온다. 비동기식 I/O의 장점은 I/O 작업이 오래 걸리는 경우에도 프로그램의 성능과 사용자의 응답성을 유지할 수 있다. 하지만 구현이 복잡하고 오류 처리가 어려울 수 있다.


✅ 언제 어떤 방식을 사용해야 할까?

동기식 I/O와 비동기식 I/O는 어떤 방식을 선택할지는 프로그램의 목적과 요구사항에 따라 적절하게 사용해야 한다. 동기식 I/O는 I/O 작업이 빠르게 완료되거나 순차적으로 처리되어야 하는 경우에 유용하고, 비동기식 I/O는 I/O 작업이 느리거나 동시에 처리되어야 하는 경우에 유용하다.



➡️ 참고자료

[BLOG]

동기식 (Synchronous) / 비동기식 (Asynchronous) 이란?
https://tlsdnjs12.tistory.com/12

[운영체제] 동기식 I/O와 비동기식 I/O
https://velog.io/@yoonuk/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%8F%99%EA%B8%B0%EC%8B%9D-IO%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%8B%9D-IO

블로킹/논블로킹, 동기/비동기 I/O란?
https://junshock5.tistory.com/148


profile
'함께'가 즐거운 개발 공부하는 사람입니다.

0개의 댓글