多线程异步同步之间的联系区别_异步是多线程吗

多线程异步同步之间的联系区别_异步是多线程吗同步异步多线程这三者关系,你能给面试官一个满意的回答吗?前几天一位朋友去面试,面试官问了他同步,异步,多线程之间是什么关系,异步比同步高效在哪?多线程比单线程高效在哪?由于回答的不好,让我帮他捋一下,其实回答这个问题不难,难就难在只对别人说理论,而没有现杀的例子。一:

同步异步多线程这三者关系,你能给面试官一个满意的回答吗?   前几天一位朋友去面试,面试官问了他同步,异步,多线程之间是什么关系,异步比同步高效在哪?多线程比单线程高效在哪?由于回答的不好,让我帮他捋一下,其实回答这个问题不难,难就难在只对别人说理论,而没有现杀的例子。   一:异步   1. 到底解放了谁?   <1> 从基础的同步说起   要说解放了谁,一定得有几个参与者,举个例子:当你的主线程读取一个应用程序之外的资源时,它有可能是一个文件,又有可能是一个外部服务,当用同步方式读取外部服务时,首先主线程会从用户模式进入到内核模式,在内核模式中windows会将你的请求数据交给对应的网络驱动程序,继后会让这个线程进入休眠状态,当网络驱动程序和外部服务一阵痉挛之后,网络驱动程序会将到的结果交给当初休眠的线程,windows唤醒休眠线程继而执行后续的C#代码,画个简图理解一下,不一定全对。   
多线程异步同步之间的联系区别_异步是多线程吗
多线程异步同步之间的联系区别_异步是多线程吗   这里就存在着一个非常大的问题,步骤4-步骤7之间,你的主线程一直都是休眠状态,比如在GUI编程中,有一个重要的原则就是解放你的UI线程(主线程),所以解决这个问题就迫在眉睫。   <2> 异步方式下的处理方案   说到这里,大家应该知道了异步方式就是为了解放主线程,又可以叫调用线程,没错,接下来看一下同样的场景在异步中如何处理的。   
多线程异步同步之间的联系区别_异步是多线程吗
多线程异步同步之间的联系区别_异步是多线程吗   从图中可以看到,步骤三中将thread数据交给网络驱动程序之后,该thread就直接返回不管了,当后续网络驱动程序数据后,将数据丢给CLR线程池中的IO线程再由它触发你的回调函数。   <3> 总结   异步相比同步效率高就高在解放了调用线程,在驱动程序和远程服务RoundTrip期间,调用线程还可以执行其他工作,放在GUI上就是主线程可以继续响应用户的超敏操作。   由于没有空转的线程,CPU可以得到最满载的运转,更少的线程就有更少的线程栈空间,更少的GC回收时间和上下文切换。   2. 代码演示   还是那句话,光说可不行,你得上一点代码看看,有了上面的理论基础,这里我就模拟爬取下博客园首页的所有文章的用户头像。   <1> 同步代码   <2> 异步代码   从结果可以看出,异步在图片期间,主线程还可以做其他事情,这就是异步最大的特点。   3. windbg 提取是否真为线程池io线程   其实在图2中我口口声声的说是线程池中的IO线程回调了你的函数,大家先要明白一个概念,线程池中有两种类别的线程,一个是工作线程,一个是IO线程,而工作线程常常就是我们通过代码进行操控,IO线程通常由底层CLR接管,常常用于处理外部资源的操作,如下ThreadPool的GetMaxThreads方法。   有了这个基础,再将 AsyncDownloadImages方法修改如下,抓取一下dump文件   ~*e !clrstack 查看所有托管线程的调用堆栈   !threads 查看编号13的线程类型   其中的 可以明显的看到是 Threadpool Completion Port,没有骗你吧, 。   二:多线程   相比单线程,多线程用更多的CPU和更多的线程资源换取更快的计算时间,是一种经典的空间换时间策略,代码就不上了,相信多线程大家都快用烂了。   三:总结   1. 多线程比单线程高效的原因就是利用了CPU的多核计算把一个大的任务分而治之从而加速任务计算。   2. 异步比同步高效的原因是前者释放了调用线程,让调用线程可以做更多的事情而不至于被windows强制休眠浪费线程资源。   言简意赅吧~, 好了,本篇就说到这里,希望对你有帮助。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/41866.html

(0)
上一篇 2024年 9月 7日 上午7:42
下一篇 2024年 9月 7日

相关推荐

关注微信