Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Aysn同步非阻塞IO客户端如何工作?_C#_Java_Asynchronous_Async Await - Fatal编程技术网

C# Aysn同步非阻塞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以及完成方式与操作系

我很想知道客户端是如何工作的,比如Java的AsyncHttp客户端或C#的AsyncWebRequest特性。基本上,底层代码是如何工作的,以确保线程从不只是等待IO操作的结果


我猜是机器中断了。但我不知道它们在C#或Java之类的高级语言中是如何工作的。

可能有很多方面。现在的大多数操作系统都有非阻塞IO调用,它可以切换到使用非阻塞IO调用,而不是阻塞IO调用。如果级别低于该级别,则取决于设备。几乎所有设备都会引发由中断处理程序处理的中断,但操作系统如何将其转换为非阻塞IO以及完成方式与操作系统和异步实现不同。

我认为它们的工作方式是通过一些操作系统API将中断响应设置为通用处理程序,该泛型处理程序被调用,它启动一个新线程,并调用您提供的处理程序。

下面是有关处理C#的异步Web请求的更多信息。

您是否询问io等待是如何在低级别实现的?我询问这些异步库使用了什么使它们成为非阻塞的。我不知道是否是IO等待。据我所知,异步活动是在一个额外线程的帮助下执行的,该线程负责将给定的策略应用到另一个线程上运行的任务管道。基本上,您将任务发送到管道,并在任务准备就绪时收到通知,基本上就是这样,您为此“策略线程”浪费了额外的CPU功率,但另一方面,您得到了异步行为。这就是我从C#5.0的第一次演示中所记得的。