Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does .NET make use of IO Threads or IO Completion Ports?

We have a .NET application that makes several concurrent calls to various web services, collects their responses and then makes a few calculations off those responses. In attempting to derive additional performance, I've been investigating the use of approaches that make use of .NET's IO threading via the use of IO completion ports. I've read through several resources including Joe Duffy's recent book Concurrent Programming on Windows and while I "get" their usefulness, I'm a little unclear as to their behavior within .NET and am looking for a concise explanation.

like image 986
James Alexander Avatar asked Feb 12 '09 03:02

James Alexander


People also ask

What is a completion port thread?

A completion port thread will only be used briefly to mark the corresponding task in . NET as completed. If you start several FileStream instances in a loop, then the thread pool will create more IOCP threads to handle all the completing I/O request packets.

What is an IO thread?

The IO thread option allows each disk image to have its own thread instead of waiting in a queue with everything else.

What is worker thread in ASP net?

The CLR thread pool contains two kinds of threads—the worker threads and the I/O completion port or IOCP threads. That means your ASP.Net worker process actually contains two thread pools: the worker thread pool and the IOCP thread pool. Naturally, these pools have different purposes. When you use methods like Task.

What is. net thread pool?

NET Framework 4, the thread pool creates and destroys worker threads in order to optimize throughput, which is defined as the number of tasks that complete per unit of time. Too few threads might not make optimal use of available resources, whereas too many threads could increase resource contention.


1 Answers

Chances are that you don't have to do anything if you are using the asynchronous methods already. Depending on the technology that you are using for the call to the web service, ultimately, it's going to drop down to the Win32 API to make the call to get bytes from the network, and to that end, it will use I/O Completion Ports in order to handle asynchronous calls.

The basic premise behind I/O completion ports is that when waiting on I/O operations, there is a thread pool that is kept waiting for when the I/O operations complete (assuming you registered to use I/O completion ports). When your registered operation completes, the thread from the I/O completion port thread pool is used to handle the callback.

Of course, after calling out to the I/O completion port, your thread can move on to do more work, or terminate, the choice is up to you.

The following should help describe it more:

I/O Completion Ports:

http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx

Inside I/O Completion Ports (WayBack Machine):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

like image 91
casperOne Avatar answered Oct 16 '22 05:10

casperOne