阅读本文后指出:
设备完成其作业后(IO操作) - 它通过中断通知CPU.
...... ......
但是,"完成"状态仅存在于操作系统级别; 该进程有自己的内存空间,必须通知
...... ......
由于库/ BCL使用标准的P/Invoke重叠I/O系统,因此它已经使用I/O完成端口(IOCP)注册了句柄,IOCP是线程池的一部分.
...... ......
因此,简单地借用 I/O线程池线程来执行APC,APC通知任务它已完成.
关于大胆的部分,我很有趣:
如果我理解正确,在IO操作完成后,它必须通知执行IO操作的实际进程.
问题#1:
这是否意味着它为每个完成的IO操作抓取一个新的线程池线程?或者这是一个专门的线程数?
问题2:
看着 :
for (int i=0;i<1000;i++)
{
PingAsync_NOT_AWAITED(i); //notice not awaited !
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我将同时运行1000个IOCP线程池线程(某种类型),当它们全部完成时?