异步如何提升了生产力


异步如何提升了生产力

同步的限制

想知道如何提升了生产力,首先得知道不使用异步时,生产力是怎么被限制的。

举个例子:

当你的主线程读取一个应用程序之外的资源时,它有可能是一个文件,又有可能是一个外部服务,当用同步方式读取外部服务时,首先主线程会从用户模式进入到内核模式,在内核模式中windows会将你的请求数据交给对应的网络驱动程序,继后会让这个线程进入休眠状态,当网络驱动程序和外部服务一阵痉挛之后,网络驱动程序会将获取到的结果交给当初休眠的线程,windows唤醒休眠线程继而执行后续的代码,画个简图理解一下,不一定全对。

picture 0

这里就存在着一个非常大的问题,步骤4-步骤7之间,你的主线程一直都是休眠状态。
如果你这个是一个GUI程序,那么你的主线程休眠了,你的程序就卡死了。

异步是如何提升生产力的

到这里,大家应该知道如何避免主线程休眠了,那就是使用异步。

来看一下同样的场景在异步中如何处理的

picture 1

图中可以看到,步骤三中将thread数据交给网络驱动程序之后,该thread就直接返回不管了,当后续网络驱动程序获取数据后,将数据丢给CLR线程池中的IO线程再由它触发你的回调函数。

总结

异步相比同步效率高就高在解放了调用线程,在驱动程序和远程服务RoundTrip期间,调用线程还可以执行其他工作,放在GUI上就是主线程可以继续响应用户的超敏操作

由于没有空转的线程,CPU可以得到最满载的运转,更少的线程就有更少的线程栈空间,更少的GC回收时间和上下文切换。


文章作者: 徐镖林
WeChat QR Code
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 徐镖林 !
  目录