首页 新闻 会员 周边 捐助

.NET Core 同步和异步的差别是什么

1
悬赏园豆:20 [已解决问题] 解决于 2022-08-28 16:29

是指Action方法。如:

public ActionResult PushFileData([FromBody] Web_PushFileData file) //同步

public async ActionResult PushFileData([FromBody] Web_PushFileData file) //异步

疑问:对于同步方法,每个请求都是使用同个线程吗?如客户A请求同步Action,还未执行完毕时,客户B请求会阻塞。
对于异步方法,每个请求都是从线程池拿空闲线程出来执行方法?也就是客户A和客户B请求方法,都是在不同子线程里分别执行的。

PER10的主页 PER10 | 初学一级 | 园豆:8
提问于:2021-01-12 19:44
< >
分享
最佳答案
0

题主说的应该是.NET 的 TPL编程。

  许多个人电脑和工作站都有多核CPU,可以同时执行多个线程。为了充分利用硬件,您可以将代码并行化,以便跨多个处理器分发工作。

  在过去,并行需要对线程和锁进行低级操作。Visual Studio和.NET框架通过提供运行时、类库类型和诊断工具来增强对并行编程的支持。这些特性是在.NET Framework 4中引入的,它们使得并行编程变得简单。您可以用自然的习惯用法编写高效、细粒度和可伸缩的并行代码,而无需直接处理线程或线程池。

  下图展示了.NET框架中并行编程体系结构。

使用场景

更深入的可以参考: 《并发编程是什么鬼》

收获园豆:10
楠木大叔 | 老鸟四级 |园豆:2083 | 2021-01-12 22:13

谢谢用心的回答!

PER10 | 园豆:8 (初学一级) | 2022-08-28 16:36
其他回答(2)
0

简单的讲就是
异步可以减少等待,可以增加线程的使用率
同步需要一直在那,等着,才能进行下一步,线程使用率比较低

收获园豆:5
不知道风往哪儿吹 | 园豆:2037 (老鸟四级) | 2021-01-13 11:13

谢谢回答

支持(0) 反对(0) PER10 | 园豆:8 (初学一级) | 2022-08-28 16:36
0

说下我的理解,有不对的地方也请指正。
从你贴的代码来看应该是 controller 提供对外的资源方法,理解为一个rest 资源,对于调用者来说,请求这个资源然后拿到结果,至于调用者是同步还是异步,看的是调用方的 调用方式是同步还是异步。
那你这里的同步异步,只是决定从这个方法被调用开始,方法内部执行的时候是同步还是异步,A B 两个客户同时请求的时候,不管方法同步还是异步 都不会发生A B 两个请求互相阻塞,只是决定A 和 B 请求过程中各自的请求再API 内部执行的时候是同步还是异步,现在都是用 async await task 来异步编程,是为了让这个方法被调用的时候 内部不阻塞,提高效率, 不会影响 其他请求来的时候 互相之间的影响.
补充: 异步 不等于 多线程,CPU 分配线程有自己的调度方式,是有一定关系,但应该不是你想的那种关系

收获园豆:5
死神的背影 | 园豆:667 (小虾三级) | 2021-01-13 16:56

谢谢用心的回答!

支持(0) 反对(0) PER10 | 园豆:8 (初学一级) | 2022-08-28 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册