I/O 완료 포트를 이해하려고합니다. 구체적으로 I/O에 async
- await
을 사용하는 것과 관련이 있습니다.IOCP는 입출력이 진행되는 동안 실행중인 스레드입니까?
악명 높은 제품 There is No Thread은 입출력이 완료된 후 잠깐 차용 한 IOCP에 대해 이야기합니다. 이 글의 요점은 멋진 하드웨어 수준의 I/O가 기내에있을 때 루프처럼 소모되는 스레드가 없다는 것을 보여주는 것입니다.
I/O 완료 여부 ? 아닙니다. I/O는 아직 완료 되었습니까? 아닙니다. I/O는 아직 완료 되었습니까? 호 ...
그러나 그 다음 나는
"구성 요소가 대기 요소의 완료 포트를 확인 담당하고있다"고 말했다되는 this article 찾고 있어요 예를 들면 다음과 같습니다.
public class IOCompletionWorker
{
public unsafe void Start(IntPtr completionPort)
{
while (true)
{
uint bytesRead;
uint completionKey;
NativeOverlapped* nativeOverlapped;
var result = Interop.GetQueuedCompletionStatus(
completionPort,
out bytesRead,
out completionKey,
&nativeOverlapped,
uint.MaxValue);
var overlapped = Overlapped.Unpack(nativeOverlapped);
if (result)
{
var asyncResult = ((FileReadAsyncResult)overlapped.AsyncResult);
asyncResult.ReadCallback(bytesRead, asyncResult.Buffer);
}
else
{
ThreadLogger.Log(Interop.GetLastError().ToString());
}
Overlapped.Free(nativeOverlapped);
}
}
}
var completionPortThread = new Thread(() => new IOCompletionWorker().Start(completionPortHandle))
{
IsBackground = true
};
completionPortThread.Start();
내게는 폴링이 진행되는 것처럼 보입니다. (2) "I/O (1)"작업자 스레드 "와 -
나는 그것이 .NET 응용 프로그램이 스레드 풀의 2 개 종류가 있다는 말을 사실인가요 내 질문
- 졸이다 것 같아요 스레드 "?
- 사실 일 경우 작업자 스레드와 N 개의 I/O 스레드와 같이 구성에 고정 된 번호가 지정되어 있습니까? 그리고 대개 M 대 N의 비율은 무엇입니까?
- 정확하게 I/O 스레드가 사용되는 시점은 언제입니까?
질문에 대한 답변을 얻었습니까? :) – fbrosseau