gpt4 book ai didi

c# - .NET 相当于 Java NIO 选择器

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:10 24 4
gpt4 key购买 nike

我知道 .NET 有一个很好的网络 I/O 异步模型,它在后台使用完成端口。但是所有回调都发生在线程池的 IO 线程上。

是否有任何 .NET 对应物,如 Java 的选择器,它在单个线程中处理多个流?或者,线程池回调比这种单线程方法更好地扩展?

谢谢,

多德

最佳答案

对于异步操作,IO 句柄与线程池相关联。当异步操作完成时,我相信回调(对于每个流)可能会或可能不会使用同一个线程执行,任何可用的线程池线程都可以处理回调,同一个线程很可能可以处理多个回调或只处理一个回调基于运行时条件的回调。

希望对你有帮助

编辑:添加对多德评论的回复

我对 Selector API 不是很熟悉,但是通过查看发布的示例 here似乎 Selector 一直等到所有事件发生。真的吗?如果是这样,那么调用者将不得不等待所有事件发生,即使一个事件比另一个事件发生得早。但是,如果选择器在事件发生后立即处理它,那么可能会遇到选择器正在处理一个事件的回调而另一个事件到达的情况(我想在这种情况下传入事件会在某处排队否则你会丢弃事件)但是当事件是正交的并且应该在它们发生时立即处理时它仍然会降低吞吐量。

.NET 中的异步模型以线程池为中心,以减少创建新线程的开销(因为这是一项昂贵的操作)。如果您观察到线程池已达到最大值,您可以将池中的线程数增加为 documented。这里。请记住,在一天结束时,您会受到处理器数量的限制,即在双核机器上,只有 2 个线程可以主动运行,所有其他线程都被阻止,因此可能需要考虑这一点。

希望这对您有所帮助。

关于c# - .NET 相当于 Java NIO 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1181322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com