首页 新闻 搜索 专区 学院

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

0
悬赏园豆:20 [待解决问题]

是指Action方法。如:

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

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

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

PER10的主页 PER10 | 初学一级 | 园豆:98
提问于:2021-01-12 19:44
< >
分享
所有回答(3)
0

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

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

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

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

使用场景

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

戎"码"一生 | 园豆:475 (菜鸟二级) | 2021-01-12 22:13
0

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

不知道风往哪儿吹 | 园豆:1314 (小虾三级) | 2021-01-13 11:13
0

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

死神的背影 | 园豆:660 (小虾三级) | 2021-01-13 16:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册