温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

WCF中的InstanceContext和ConcurrencyMode是什么

发布时间:2021-12-15 09:31:21 来源:亿速云 阅读:143 作者:iii 栏目:编程语言

这篇文章主要讲解了“WCF中的InstanceContext和ConcurrencyMode是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF中的InstanceContext和ConcurrencyMode是什么”吧!

先照本宣科一下,WCF的实例通过InstanceContext属性来指定,可以的取值是 Single, PerSession, PerCall。并发通过ConcurrencyMode属性来指定,可以的取值是 Single, Multiple, Reentrant。它们的组合就有3*3=9种。Reentrant的并发模式实质上就是Single的一个特殊情况最后再讨论。InstanceContext 用于控制服务对象的个数,ConcurrencyMode用于控制服务对象是否可以同时服务多个请求。

好了我们开始举例,假如我们的服务是做早点,InstanceContext决定了我们有几个师傅来做早点,而ConcurrencyMode决定了每个师傅只能一个一个的做还是同时把要做的一起做。下面开始分情况逐一说明:

1. InstanceContext  = Single & ConcurrencyMode = Single

InstanceContext = Single  我们这个早点铺就一个师傅

ConcurrencyMode = Single 师傅一次只能做一件事儿

不难想象如果买早点的人多了就会排着长长的队,而且如果前面有一个人要5套早点,那后面的人只能等那个人完事儿才能轮到自己。对师傅能力要求不高,一次做好一件事儿就好。

2.InstanceContext = Single & ConcurrencyMode = Multiple

InstanceContext = Single 我们这个早点铺就一个师傅

ConcurrencyMode = Multiple 师傅同时做所要做的事儿

这个是早点铺老板想要的情况,雇最少的人干最多的事,但是对做早点的师傅要求非常高,一次要做好很多事。不能人一多就做乱了把张三的烧饼少做一个,把李四的豆浆多做了一碗等。

3.InstanceContext = PerSession & ConcurrencyMode = Single

InstanceContext = PerSession 为每个顾客提供一个师傅专门服务(顾客来时现招,顾客走后就解雇)

ConcurrencyMode = Single 某一时刻只有一个师傅工作,每个师傅一次只能做一件事儿。

这在现实生活中不可能存在但在计算机中却非常常见,所以我的例子只是说明关键问题,请不要太较真。这时第个顾客都会有一个专门的师傅来服务,但我们只有一个厨房并且只能容下一个师傅,给张三服务的师傅做早点时别的师傅只能等待。师傅一次只能做一样东西,如果一个顾客要了很多的东西,那师傅一样一样的来做。所以可以还是单线程只是有多个师傅而已。对师傅能力要求不高,一次做好一件事儿就好。

4.InstanceContext = PerSession & ConcurrencyMode = Multiple

InstanceContext = PerSession 为每个顾客提供一个师傅专门服务(顾客来时现招,顾客走后就解雇)

ConcurrencyMode = Multiple 所有的师傅同时工作,每个师傅可以同时做所要做的所有事儿

这在现实生活中也是不可能存在的。这时每个顾客都会有一个专门的师傅来服务,并且师傅们都可以同时工作,并且师傅可以同时做所有要做的所有早点。对师傅的要求较高,因为只是同时处理一个顾客的所有早点。

5. InstanceContext = PerCall & ConcurrencyMode = Single

InstanceContext = PerCall 为每个顾客要的每个需求都提供一个师傅专门服务(顾客提出要求时现招,师傅做完后就被解雇)

ConcurrencyMode = Single 某一时刻只有一个师傅工作,每个师傅只用做一件事儿。

这在现实生活中也是不可能存在的。这下师傅更多了,与情况3一样在某一时刻只能有一个师傅工作,不同的是师傅只用做一件事儿。对师傅能力要求不高,能做好一件事儿就好。

6. InstanceContext = PerCall & ConcurrencyMode = Multiple

InstanceContext = PerCall  为每个顾客要的每个需求都提供一个师傅专门服务(顾客提出要求时现招,师傅做完后就被解雇)

ConcurrencyMode = Multiple 所有的师傅同时工作,每个师傅只用做一件事儿。

这在现实生活中也是不可能存在的。这时客户的满意度理论上是最高的,顾客的每个要求都有师傅在做,而且所有的师傅在同时做事儿。当然这对早点铺的老板要付出的代价是最大的。对师傅能力要求不高,能做好一件事儿就好。

7. InstanceContext = * & ConcurrencyMode = Reentrant

这种情况比较特殊,假如我们不生产早点全是从别的早点铺去买来然后再倒手给顾客,传说中的骑驴。这时假如顾客说出需要什么需要5秒钟的时间,我们打电话向其它店索要,其它店再把东西送到需要1分钟,再把送来的东西给到顾客手中需要5s的时间。可见店内处理时间为10s,大量的时间在调货的时间(调用别的服务)。所以这时比较合理的处理是,利用调货的时间来处理后面顾客的需求,在这1分钟的时间里可以处理20个顾客的需求,并且20个调货请求也已经发送。等到第1个顾客的货送到后再转回来为其完成剩下的服务,这样可以节省很多后面顾客等待的时间。InstanceContext无论取什么值都与ConcurrencyMode = Single的差不多只是针对有外部调用的情况有所优化。

感谢各位的阅读,以上就是“WCF中的InstanceContext和ConcurrencyMode是什么”的内容了,经过本文的学习后,相信大家对WCF中的InstanceContext和ConcurrencyMode是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

wcf
AI