feO*_*O2x 7 .net asynchronous iocp threadpool .net-core
.NET / .NET Core 线程池在内部使用两种不同类别的线程:工作线程和 I/O 完成端口 (IOCP) 线程。两者都只是通常的托管线程,但用于不同的目的。通过不同的 API(例如Task.Start
或ThreadPool.QueueUserWorkItem
),我可以在工作线程上启动受 CPU 限制的异步操作(不应阻塞,否则线程池可能会创建额外的工作线程)。
但是如何执行受 I/O 限制的异步操作呢?在这些情况下,IOCP 线程的行为究竟如何?具体来说,我有以下问题:
async await
和SynchronizationContext
?IOCP 线程是否处理异步 I/O 响应,然后例如将 UI 线程上的延续排队(假设ConfigureAwait(false)
未调用)?Damien 和 Hans 在评论中为我指出了正确的方向,我想在这个答案中总结一下。
Damien 指出了Stephen Cleary 的精彩博客文章,它回答了前三点:
SynchronizationContext
或线程池。Hans指出Linux(epoll)和MacOS(kqueue)中也有类似IOCP的机制。
归档时间: |
|
查看次数: |
2469 次 |
最近记录: |