Asynchronous 对于网络绑定IO,异步的好处是否在较差的网络条件下更大?

Asynchronous 对于网络绑定IO,异步的好处是否在较差的网络条件下更大?,asynchronous,networking,Asynchronous,Networking,假设我们想要异步启动十几个HTTP请求。异步所节省的时间是否会随着网络速度的降低而增加 据我所知,我们可以将这样的请求分为两部分。第一个,我们正在做一些轻量级的CPU限制的工作(初始化和完成连接-联系网络硬件,将接收到的响应放入阵列,等等)。第二个问题需要更多的时间,在等待数据到达时线程被阻塞 异步的目标是处理并发发出的所有请求的第二部分,并且(与CPU绑定部分不同),我们必须等待数据的时间越长,连接速度越慢。它缩短了等待数据部分的时间,对cpu绑定部分没有任何影响 考虑到这一点,我倾向于得出结

假设我们想要异步启动十几个HTTP请求。异步所节省的时间是否会随着网络速度的降低而增加

据我所知,我们可以将这样的请求分为两部分。第一个,我们正在做一些轻量级的CPU限制的工作(初始化和完成连接-联系网络硬件,将接收到的响应放入阵列,等等)。第二个问题需要更多的时间,在等待数据到达时线程被阻塞

异步的目标是处理并发发出的所有请求的第二部分,并且(与CPU绑定部分不同),我们必须等待数据的时间越长,连接速度越慢。它缩短了等待数据部分的时间,对cpu绑定部分没有任何影响

考虑到这一点,我倾向于得出结论,异步实现可以在糟糕的网络环境中为我们节省更多的时间。此外,如果从网络上即时接收到数据,异步的好处将等于零


这些结论是真的吗?

不是。等待数据的时间没有改变。@user207421为什么,你是什么意思?当网络变慢时(无论“变慢”意味着什么,例如低带宽、数据包丢失,这意味着TCP需要重新传输数据包等),网络需要向您发送(可能较大)文件的时间不是变长了吗?当然,传输时间会随着网络拥塞或错误而增加,但这不是您要问的。您询问的是异步I/O:您是否使用阻塞或非阻塞或异步I/O不可能影响时间。如果您不这么认为,请解释如何对单个请求使用@user207421,它不能。我说的是并发处理的多个请求。据我所知,如果以异步方式完成一系列请求(除非您端的某个请求是网络路径中最慢的部分),则完成速度会更快,因为要开始第二个请求,您不需要在其内部完成前一个请求。也就是说,您可以同时启动多个连接并接收属于多个请求的帧。会更快完成吗?为什么?如果使用不同的API,网络如何变得更快?