【轉】WCF中的InstanceContext與ConcurrencyMode

來源:互聯網
上載者:User

標籤:

一、前言

最近忙於公司的線上升級項目,一個人要負責公司四大產品的線上升級,這四個產品是在Revit中以外掛程式形式存在的,目前基於WCF來實現。等客戶總量突破5萬了,再重新用socket實現。

由於有伺服器並行作業,所以要好好研究WCF的InstanceContext與ConCurrencyMode,找了好多文章,都沒這篇寫的言簡意賅,特轉寄保留。

 

二、原文內容

原作者著作權資訊****************************************************************************************************************

原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://arthurshayne.blog.51cto.com/3491820/1241514

***************************************************************************************************************************

 

今天學習了徐長龍老師的<<跟我一起從零開始學WCF>>的第9講<<會話,執行個體與並發>>,對執行個體與並發有點混於是去網上查了一下,發現一篇不錯的文章推薦給大家http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and#Instance。

由此談一些自己對執行個體與並發的看法,執行個體與並發不是同一件事情,但又相互有影響。以下我就舉一些有趣的例子來談談我對WCF中執行個體與並發的理解。

先 照本宣科一下,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的差不多隻是針對有外部調用的情況有所最佳化。

我在上面提到的對師傅要求高或較高的情況, 也就表明我們的程式需要做一些安全執行緒的處理,保證我們的程式在多線程的情況下不會出現錯誤。對師傅要求不高的情況就是不存在並發的情況。以上是我對 InstanceContext和ConcurrencyMode的一點個人理解,如有不妥之處請指教。

 

 

原文著作權資訊**************************************************************************

本文出自 “唯有文字劃破時空” 部落格,請務必保留此出處http://arthurshayne.blog.51cto.com/3491820/1241514

【轉】WCF中的InstanceContext與ConcurrencyMode

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.