是指Action方法。如:
public ActionResult PushFileData([FromBody] Web_PushFileData file) //同步
public async ActionResult PushFileData([FromBody] Web_PushFileData file) //异步
疑问:对于同步方法,每个请求都是使用同个线程吗?如客户A请求同步Action,还未执行完毕时,客户B请求会阻塞。
对于异步方法,每个请求都是从线程池拿空闲线程出来执行方法?也就是客户A和客户B请求方法,都是在不同子线程里分别执行的。
题主说的应该是.NET 的 TPL编程。
许多个人电脑和工作站都有多核CPU,可以同时执行多个线程。为了充分利用硬件,您可以将代码并行化,以便跨多个处理器分发工作。
在过去,并行需要对线程和锁进行低级操作。Visual Studio和.NET框架通过提供运行时、类库类型和诊断工具来增强对并行编程的支持。这些特性是在.NET Framework 4中引入的,它们使得并行编程变得简单。您可以用自然的习惯用法编写高效、细粒度和可伸缩的并行代码,而无需直接处理线程或线程池。
下图展示了.NET框架中并行编程体系结构。
更深入的可以参考: 《并发编程是什么鬼》
谢谢用心的回答!
简单的讲就是
异步可以减少等待,可以增加线程的使用率
同步需要一直在那,等着,才能进行下一步,线程使用率比较低
谢谢回答
说下我的理解,有不对的地方也请指正。
从你贴的代码来看应该是 controller 提供对外的资源方法,理解为一个rest 资源,对于调用者来说,请求这个资源然后拿到结果,至于调用者是同步还是异步,看的是调用方的 调用方式是同步还是异步。
那你这里的同步异步,只是决定从这个方法被调用开始,方法内部执行的时候是同步还是异步,A B 两个客户同时请求的时候,不管方法同步还是异步 都不会发生A B 两个请求互相阻塞,只是决定A 和 B 请求过程中各自的请求再API 内部执行的时候是同步还是异步,现在都是用 async await task 来异步编程,是为了让这个方法被调用的时候 内部不阻塞,提高效率, 不会影响 其他请求来的时候 互相之间的影响.
补充: 异步 不等于 多线程,CPU 分配线程有自己的调度方式,是有一定关系,但应该不是你想的那种关系
谢谢用心的回答!