WCF中的InstanceContext和ConcurrencyMode是什么
这篇文章主要讲解了“WCF中的InstanceContext和ConcurrencyMode是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF中的InstanceContext和ConcurrencyMode是什么”吧!
10年积累的成都网站制作、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有昌平免费网站建设让你可以放心的选择与我们合作。
先照本宣科一下,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是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
分享文章:WCF中的InstanceContext和ConcurrencyMode是什么
标题链接:http://azwzsj.com/article/gsiogc.html