मैं आई/ओ समापन बंदरगाहों समझने की कोशिश कर रहा हूँ और विशेष रूप से कैसे वे async
का उपयोग कर से संबंधित हैं - await
आई/ओ के लिए। IOCPs के बारे मेंक्या आईओसीपी एक धागा है जो आई/ओ हो रहा है या उसके बाद हो रहा है?
कुख्यात लेख There is No Thread वार्ता संक्षिप्त उधार दिए जाने के बाद आई/ओ पूरा हो गया है। चूंकि आलेख का पूरा बिंदु यह दिखाने के लिए है कि जब फैंसी हार्डवेयर-स्तर 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);
}
}
}
जैसे उदाहरण देता है 0
var completionPortThread = new Thread(() => new IOCompletionWorker().Start(completionPortHandle))
{
IsBackground = true
};
completionPortThread.Start();
जो मेरे लिए कुछ मतदान चल रहा है की तरह लग रहा है।
मुझे लगता है कि मेरे सवालों
- करने के लिए नीचे उबाल यह है कि एक .NET अनुप्रयोग धागा पूल के 2 प्रकार है कहने के लिए सच है - (2) "मैं/हे (1)" कार्यकर्ता धागे 'और धागे '?
- यदि यह सच है, वहाँ एक निश्चित संख्या, एक विन्यास में निर्दिष्ट, एम कार्यकर्ता धागे और एन आई/ओ धागे की तरह है? और आम तौर पर एम से एन का अनुपात क्या होता है?
- जब I/O धागे ठीक से उपयोग किए जाते हैं?
क्या आपके प्रश्न का उत्तर दिया गया है? :) – fbrosseau