.NET异步分析相关数据

 

客户端Console(连接Webservice)

同步:(客户端记录数据)

进入方法,新增1个线程

New webservice对象,新增1个线程

同步调用webservice,新增2个线程

一直不消耗工作线程和IO线程,一共增加了3个线程

 

异步:(客户端记录数据)

进入方法,新增1个线程。

New webservice对象,新增1个线程

异步调用webservice,新增6个线程,占用1IO线程

然后中途会消耗新增1个线程,中途可能会回收1个线程

异步webservice回调,再占用1IO线程

最后回收2IO线程(最后不占用工作线程和IO线程)

(最高会占用2IO线程,最后全部回收,一共增加了7个线程)

 

服务端OneWay:(服务端记录数据)

进入方法,新增1个线程,新占用1个工作线程

退出方法,回收1个工作线程

(最高还占用1个工作线程,无IO线程消耗,一共肯定会增加1个线程)

 

WebService(服务内部异步方式)

1、 WS内部调用异步SqlBeginExecuteReader

进入WebMethod,新增1个线程(或不增)。占用2个工作线程,无IO线程消耗

返回异步IasyncResult后,回收1个工作线程,无进程新增

执行异步回调函数,新占用1个工作线程,无进程新增

异步回调函数执行完毕,回收1个工作线程

(最后还占用1个工作线程,无IO线程消耗,一共增加了1个线程(或不增加线程))

 

2、 WS内部调用委托异步Remoting(服务端不等待remoting返回)

进入WebMethod,新增1个线程(或不增)。占用2个工作线程,无IO线程消耗。

WebMethod调用完毕后,回收1个工作线程,无进程新增。

执行异步委托Remoting回调函数,占用1IO线程,无进程新增。

异步回调函数执行完毕,回收1IO线程

(最后还占用1个工作线程,一共增加了1个线程(或不增加线程))

 

3、 WS内部调用委托异步普通方法(服务端不等待remoting返回)

进入WebMethod,不消耗线程,占用2个工作线程,无IO线程消耗

WebMethod调用完毕后,不回收工作线程,无进程新增

执行异步委托回调函数,不回收不占用工作线程和IO线程,无进程新增

异步回调函数执行完毕,回收1个工作线程。

(最后还占用1个工作线程,一共没增加线程)

 

Console(客户端自己测试自己)

1、 异步委托Remoting,回调方式

进入方法,不新增线程,不占用任何工作线程、IO线程

开始异步委托,不新增线程,不占用任何工作线程、IO线程

回调委托异步,不新增线程,占用1IO线程

回调函数执行完毕,回收1IO线程

(最后不占用任何工作线程、IO线程,一共没增加线程)

 

2、 异步委托普通方法,回调方式

进入方法,不新增线程,不占用任何工作线程、IO线程

开始异步委托,新增1个线程(或不增),占用1个工作线程

回调委托异步,不新增线程,不新占用工作线程(现在仍然有1个工作线程被占用)

回调函数执行完毕,不新增线程,回收1个工作线程

(最后不占用任何工作线程、IO线程,一共增加了1个或没增加线程)

 

这个是自己根据测试代码分析出的结果。

如转载,请注明来自:http://lawson.cnblogs.com/

 

posted @ 2012-07-08 13:18  Lawson  阅读(320)  评论(0编辑  收藏  举报