這篇文章主要講解了“WCF中的InstanceContext和ConcurrencyMode是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“WCF中的InstanceContext和ConcurrencyMode是什么”吧!
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有昌平免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
先照本宣科一下,WCF的實(shí)例通過InstanceContext屬性來指定,可以的取值是 Single, PerSession, PerCall。并發(fā)通過ConcurrencyMode屬性來指定,可以的取值是 Single, Multiple, Reentrant。它們的組合就有3*3=9種。Reentrant的并發(fā)模式實(shí)質(zhì)上就是Single的一個(gè)特殊情況最后再討論。InstanceContext 用于控制服務(wù)對(duì)象的個(gè)數(shù),ConcurrencyMode用于控制服務(wù)對(duì)象是否可以同時(shí)服務(wù)多個(gè)請(qǐng)求。
好了我們開始舉例,假如我們的服務(wù)是做早點(diǎn),InstanceContext決定了我們有幾個(gè)師傅來做早點(diǎn),而ConcurrencyMode決定了每個(gè)師傅只能一個(gè)一個(gè)的做還是同時(shí)把要做的一起做。下面開始分情況逐一說明:
InstanceContext = Single 我們這個(gè)早點(diǎn)鋪就一個(gè)師傅
ConcurrencyMode = Single 師傅一次只能做一件事兒
不難想象如果買早點(diǎn)的人多了就會(huì)排著長長的隊(duì),而且如果前面有一個(gè)人要5套早點(diǎn),那后面的人只能等那個(gè)人完事兒才能輪到自己。對(duì)師傅能力要求不高,一次做好一件事兒就好。
InstanceContext = Single 我們這個(gè)早點(diǎn)鋪就一個(gè)師傅
ConcurrencyMode = Multiple 師傅同時(shí)做所要做的事兒
這個(gè)是早點(diǎn)鋪老板想要的情況,雇最少的人干最多的事,但是對(duì)做早點(diǎn)的師傅要求非常高,一次要做好很多事。不能人一多就做亂了把張三的燒餅少做一個(gè),把李四的豆?jié){多做了一碗等。
InstanceContext = PerSession 為每個(gè)顧客提供一個(gè)師傅專門服務(wù)(顧客來時(shí)現(xiàn)招,顧客走后就解雇)
ConcurrencyMode = Single 某一時(shí)刻只有一個(gè)師傅工作,每個(gè)師傅一次只能做一件事兒。
這在現(xiàn)實(shí)生活中不可能存在但在計(jì)算機(jī)中卻非常常見,所以我的例子只是說明關(guān)鍵問題,請(qǐng)不要太較真。這時(shí)第個(gè)顧客都會(huì)有一個(gè)專門的師傅來服務(wù),但我們只有一個(gè)廚房并且只能容下一個(gè)師傅,給張三服務(wù)的師傅做早點(diǎn)時(shí)別的師傅只能等待。師傅一次只能做一樣?xùn)|西,如果一個(gè)顧客要了很多的東西,那師傅一樣一樣的來做。所以可以還是單線程只是有多個(gè)師傅而已。對(duì)師傅能力要求不高,一次做好一件事兒就好。
InstanceContext = PerSession 為每個(gè)顧客提供一個(gè)師傅專門服務(wù)(顧客來時(shí)現(xiàn)招,顧客走后就解雇)
ConcurrencyMode = Multiple 所有的師傅同時(shí)工作,每個(gè)師傅可以同時(shí)做所要做的所有事兒
這在現(xiàn)實(shí)生活中也是不可能存在的。這時(shí)每個(gè)顧客都會(huì)有一個(gè)專門的師傅來服務(wù),并且?guī)煾祩兌伎梢酝瑫r(shí)工作,并且?guī)煾悼梢酝瑫r(shí)做所有要做的所有早點(diǎn)。對(duì)師傅的要求較高,因?yàn)橹皇峭瑫r(shí)處理一個(gè)顧客的所有早點(diǎn)。
InstanceContext = PerCall 為每個(gè)顧客要的每個(gè)需求都提供一個(gè)師傅專門服務(wù)(顧客提出要求時(shí)現(xiàn)招,師傅做完后就被解雇)
ConcurrencyMode = Single 某一時(shí)刻只有一個(gè)師傅工作,每個(gè)師傅只用做一件事兒。
這在現(xiàn)實(shí)生活中也是不可能存在的。這下師傅更多了,與情況3一樣在某一時(shí)刻只能有一個(gè)師傅工作,不同的是師傅只用做一件事兒。對(duì)師傅能力要求不高,能做好一件事兒就好。
InstanceContext = PerCall 為每個(gè)顧客要的每個(gè)需求都提供一個(gè)師傅專門服務(wù)(顧客提出要求時(shí)現(xiàn)招,師傅做完后就被解雇)
ConcurrencyMode = Multiple 所有的師傅同時(shí)工作,每個(gè)師傅只用做一件事兒。
這在現(xiàn)實(shí)生活中也是不可能存在的。這時(shí)客戶的滿意度理論上是最高的,顧客的每個(gè)要求都有師傅在做,而且所有的師傅在同時(shí)做事兒。當(dāng)然這對(duì)早點(diǎn)鋪的老板要付出的代價(jià)是最大的。對(duì)師傅能力要求不高,能做好一件事兒就好。
這種情況比較特殊,假如我們不生產(chǎn)早點(diǎn)全是從別的早點(diǎn)鋪去買來然后再倒手給顧客,傳說中的騎驢。這時(shí)假如顧客說出需要什么需要5秒鐘的時(shí)間,我們打電話向其它店索要,其它店再把東西送到需要1分鐘,再把送來的東西給到顧客手中需要5s的時(shí)間??梢姷陜?nèi)處理時(shí)間為10s,大量的時(shí)間在調(diào)貨的時(shí)間(調(diào)用別的服務(wù))。所以這時(shí)比較合理的處理是,利用調(diào)貨的時(shí)間來處理后面顧客的需求,在這1分鐘的時(shí)間里可以處理20個(gè)顧客的需求,并且20個(gè)調(diào)貨請(qǐng)求也已經(jīng)發(fā)送。等到第1個(gè)顧客的貨送到后再轉(zhuǎn)回來為其完成剩下的服務(wù),這樣可以節(jié)省很多后面顧客等待的時(shí)間。InstanceContext無論取什么值都與ConcurrencyMode = Single的差不多只是針對(duì)有外部調(diào)用的情況有所優(yōu)化。
感謝各位的閱讀,以上就是“WCF中的InstanceContext和ConcurrencyMode是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)WCF中的InstanceContext和ConcurrencyMode是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!