.NET异步分析相关数据
客户端Console(连接Webservice)
同步:(客户端记录数据)
进入方法,新增1个线程
New webservice对象,新增1个线程
同步调用webservice,新增2个线程
(一直不消耗工作线程和IO线程,一共增加了3个线程)
异步:(客户端记录数据)
进入方法,新增1个线程。
New webservice对象,新增1个线程
异步调用webservice,新增6个线程,占用1个IO线程
然后中途会消耗新增1个线程,中途可能会回收1个线程
异步webservice回调,再占用1个IO线程
最后回收2个IO线程(最后不占用工作线程和IO线程)
(最高会占用2个IO线程,最后全部回收,一共增加了7个线程)
服务端OneWay:(服务端记录数据)
进入方法,新增1个线程,新占用1个工作线程
退出方法,回收1个工作线程
(最高还占用1个工作线程,无IO线程消耗,一共肯定会增加1个线程)
WebService(服务内部异步方式)
1、 WS内部调用异步Sql的BeginExecuteReader
进入WebMethod,新增1个线程(或不增)。占用2个工作线程,无IO线程消耗
返回异步IasyncResult后,回收1个工作线程,无进程新增
执行异步回调函数,新占用1个工作线程,无进程新增
异步回调函数执行完毕,回收1个工作线程
(最后还占用1个工作线程,无IO线程消耗,一共增加了1个线程(或不增加线程))
2、 WS内部调用委托异步Remoting(服务端不等待remoting返回)
进入WebMethod,新增1个线程(或不增)。占用2个工作线程,无IO线程消耗。
WebMethod调用完毕后,回收1个工作线程,无进程新增。
执行异步委托Remoting回调函数,占用1个IO线程,无进程新增。
异步回调函数执行完毕,回收1个IO线程
(最后还占用1个工作线程,一共增加了1个线程(或不增加线程))
3、 WS内部调用委托异步普通方法(服务端不等待remoting返回)
进入WebMethod,不消耗线程,占用2个工作线程,无IO线程消耗
WebMethod调用完毕后,不回收工作线程,无进程新增
执行异步委托回调函数,不回收不占用工作线程和IO线程,无进程新增
异步回调函数执行完毕,回收1个工作线程。
(最后还占用1个工作线程,一共没增加线程)
Console(客户端自己测试自己)
1、 异步委托Remoting,回调方式
进入方法,不新增线程,不占用任何工作线程、IO线程
开始异步委托,不新增线程,不占用任何工作线程、IO线程
回调委托异步,不新增线程,占用1个IO线程
回调函数执行完毕,回收1个IO线程
(最后不占用任何工作线程、IO线程,一共没增加线程)
2、 异步委托普通方法,回调方式
进入方法,不新增线程,不占用任何工作线程、IO线程
开始异步委托,新增1个线程(或不增),占用1个工作线程
回调委托异步,不新增线程,不新占用工作线程(现在仍然有1个工作线程被占用)
回调函数执行完毕,不新增线程,回收1个工作线程
(最后不占用任何工作线程、IO线程,一共增加了1个或没增加线程)
这个是自己根据测试代码分析出的结果。
如转载,请注明来自:http://lawson.cnblogs.com/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述