인프런 커뮤니티 질문&답변

고대괴물님의 프로필 이미지
고대괴물

작성한 질문수

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

Callback 기반 비동기 파일 입/출력 (예제 포함)

Callback 기반 비동기 파일 입/출력 질문

해결된 질문

작성

·

339

0

 안녕하세요 수업 잘 듣고 있습니다 감사합니다.

Callback 기반 비동기 파일 입/출력 부분에 질문이 있습니다.

만약 IoThreadFunction 함수에서 다수의 WriteFileEx 를 호출하고 콜백을 모두 같은 FileIoComplete 함수로 받는상황이 있을경우 테스트 해보니 하나의 파일 IO만 완료되도 SleepEx 가 통과되는 상황이 발생하는데요

이경우 만약 모든 콜백을 받길 원하면 구조적으로 스래드 하나당 하나의 WriteFileEx를 호출하도록 하거나 별도로 이벤트를 이용해서 처리하거나 하는 방법이 떠오르긴 한데 이방법이외에 다른 방법도 있을까요??

답변 2

1

고대괴물님의 프로필 이미지
고대괴물
질문자

안녕하세요 예제 코드 작성중에 '이렇게 작성하면 어떻게 될까..' 하는 의문이 들어서 질문을 드렸었습니다. 답변주신대로 스레드를 처리하는게 좀 더 바람직한 사용법인거 같습니다. 답변 감사합니다~

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

비동기 입/출력 방식이 높은 성능을 보장하긴 합니다만 그렇다고 동기 방식이 확연히 떨어지는 것도 아닙니다. 상황에 알맞게 병행운영하는 것이 적절하다 하겠습니다. 감사합니다. ^^

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

다수의 WriteFileEx() 함수 호출이 여러 파일에 대한 것인지 모르겠습니다. 개인적으로 그런 구조로 개발해본 경험이 없습니다. 불가능할 것으로 보이지는 않으나 정상적인지 확인은 필요하겠습니다. 그리고 SleepEx() 함수가 호출되어 스레드의 상태가 Alertable wait 상태가 되었을 때 이를 여러 번 호출한다 해서 내부적으로 계수가 되지는 않습니다. wait 상태 스레드를 깨워 줄 대상(혹은 이유)이 여럿 이라면 그 중 하나만 스레드 상태를 변경해준다면 상태는 다시 본래 상태로 돌아옵니다.

그러므로 본인이 생각하는 것처럼 Alertable wait 상태를 가지는 스레드는 하나 만 존재하도록 개발하는 것이 적절하겠습니다. 만일 이벤트를 사용할 생각이라면... 굳이 비동기 처리를 해야 할 이유가 있는지 구조를 다시 생각해보는 것이 좋겠습니다.

고대괴물님의 프로필 이미지
고대괴물

작성한 질문수

질문하기