C# Aysn同步非阻塞IO客户端如何工作?
我很想知道客户端是如何工作的,比如Java的AsyncHttp客户端或C#的AsyncWebRequest特性。基本上,底层代码是如何工作的,以确保线程从不只是等待IO操作的结果C# Aysn同步非阻塞IO客户端如何工作?,c#,java,asynchronous,async-await,C#,Java,Asynchronous,Async Await,我很想知道客户端是如何工作的,比如Java的AsyncHttp客户端或C#的AsyncWebRequest特性。基本上,底层代码是如何工作的,以确保线程从不只是等待IO操作的结果 我猜是机器中断了。但我不知道它们在C#或Java之类的高级语言中是如何工作的。可能有很多方面。现在的大多数操作系统都有非阻塞IO调用,它可以切换到使用非阻塞IO调用,而不是阻塞IO调用。如果级别低于该级别,则取决于设备。几乎所有设备都会引发由中断处理程序处理的中断,但操作系统如何将其转换为非阻塞IO以及完成方式与操作系
我猜是机器中断了。但我不知道它们在C#或Java之类的高级语言中是如何工作的。可能有很多方面。现在的大多数操作系统都有非阻塞IO调用,它可以切换到使用非阻塞IO调用,而不是阻塞IO调用。如果级别低于该级别,则取决于设备。几乎所有设备都会引发由中断处理程序处理的中断,但操作系统如何将其转换为非阻塞IO以及完成方式与操作系统和异步实现不同。我认为它们的工作方式是通过一些操作系统API将中断响应设置为通用处理程序,该泛型处理程序被调用,它启动一个新线程,并调用您提供的处理程序。
下面是有关处理C#的异步Web请求的更多信息。
您是否询问io等待是如何在低级别实现的?我询问这些异步库使用了什么使它们成为非阻塞的。我不知道是否是IO等待。据我所知,异步活动是在一个额外线程的帮助下执行的,该线程负责将给定的策略应用到另一个线程上运行的任务管道。基本上,您将任务发送到管道,并在任务准备就绪时收到通知,基本上就是这样,您为此“策略线程”浪费了额外的CPU功率,但另一方面,您得到了异步行为。这就是我从C#5.0的第一次演示中所记得的。