입/출력 비동기 처리 순서 문제
이벤트 기반 파일 입/출력 강의에서 예제를 통해 프로세스가 요청한 작업의 순서와 운영체제가 실제로 해당 작업들을 처리하는 순서가 달라질 수 있다는 것을 보여주셨습니다.
저는 이 예제의 결과를 보면서 프로세스에서 요청한 작업들이 커널 레벨의 큐에 순차적으로 삽입된다고 하더라도, 결국 운영체제도 큐에서 꺼낸 작업들을 비동기로 처리한다는 것으로 이해했는데요. 서로 다른 작업들을 비동기로 처리하기 위해서는, 결국 각 작업들이 서로의 완료 여부와는 관계 없이 독립적으로 수행되기 위해 멀티 Threading과 같은 방식을 처리될 것으로 예상됩니다.
궁금한 점은 여기서 생겨났는데요, 이렇게 최종 작업마저 비동기로 처리하게 되면 I/O 작업의 순서가 꼬여 프로세스 입장에서 기대하는 파일의 최종 상태와 실제로 모든 작업을 끝마친 파일의 상태가 달라지는 경우가 발생할 수 있지 않나요?
만약에 발생하지 않는다면, 왜 발생하지 않는지 궁금합니다.
답변 2
0
순서가 중요하지 않게 입/출력을 요구하면 됩니다. 특히 쓰기의 경우 쓰는 위치가 겹치지 않도록 맞춘다면 파일의 앞쪽에서 먼저 쓰기가 완료되고 뒷쪽 쓰기가 늦게 완료된다 해서 문제가 될 것은 없겠습니다. 그러나 읽기는 사정이 다르겠지요. 특히 무조건 파일의 처음부터 순차적으로 읽어야 한다면 비동기 처리는 의도하지 않는 문제가 발생 할 수 있습니다.
결과적으로 순서가 매우 중요한 경우라면 그 순서를 잘 맞추는 것은 응용 프로그램 개발자가 그에 맞춰 개발해야 합니다. 비동기 입/출력이 동기 입/출력에 비해 상대적으로 좋은 성능을 보여준다지만 순서가 중요한 경우라면 굳이 비동기 입/출력을 선택할 이유는 없겠습니다.
0
네, 발생 할 수 있습니다. 만일 무조건 순차적 처리를 원한다면 여러 입출력을 중첩하지 말고 하나의 비동기 입출력 요청에 대한 완료가 확인 될 때 다음 요청을 이어가도록 개발하거나 아예 비동기 입출력을 포기하고 동기 순차 입/출력을 수행하면 됩니다.
0
답변 감사합니다!
추가적으로, 만일 커널 레벨의 큐에 삽입된 i/o 요청마저 그 순서가 보장되지 않는다면 하나의 파일을 대상으로 하는 i/o 작업들은 무조건 동기로 처리해야되지 않나요? 특히 쓰기 작업이 존재하는 경우는 그 순서가 꼬이면 큰일이 날 것 같습니다.
recv, send 리턴값 질문
0
77
2
스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?
0
96
2
수업과 관련해서 읽어볼 만한 책 있나요?
0
111
1
서버가 끊어버리는것에 대한 질문
0
121
2
TCP 의도적 장애 테스트 질문
0
159
2
shutdown()을 호출하는 이유
0
165
1
프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!
0
153
2
"파일 송신 서버 제작" 강의 질문입니다!
0
151
2
대표적인 장애 유현 2
0
131
2
대표적인 TCP 장애 유현
0
161
2
이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?
0
120
2
개발환경 질문이 있습니다.
0
137
1
TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!
0
221
2
메모리 관련 문제로 질문드립니다.
0
187
2
테스트 환경 질문드립니다!
0
168
2
ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.
0
419
2
하트비트 시 서버에서의 연결 종료
0
451
2
강사님 질문 드립니다.
0
249
1
소켓 입/출력 설계 정리
0
450
1
멀티스레드 기반 서버 관련 질문..!
0
412
2
빅 엔디언과 리틀 엔디언
0
378
2
TIME_WAIT 관련 문의드립니다.
0
226
1
강사님 강의자료 인쇄용으로 부탁드립니다.
0
288
1
bind 함수 관련 궁금증
0
357
2





