問個問題:
有個需求是保存用戶上傳的視頻檔案,(用戶端是自己寫的windows服務,定時查詢上傳),現在需要限制同時傳輸檔案的用戶數量5個10個什么的,不在乎效率,完成就行,這個該用什么限制?
同事說是執行緒池,但是最近看執行緒池,說是需要創建大量執行緒時使用的,感覺不太符合我這個需求的情況?有大佬好心解惑下嗎?
uj5u.com熱心網友回復:
SemaphoreSlim這個就好至于執行緒池把,其實也一樣。不過不是執行緒池,而是任意池。任何東西都可以池化,不是一說池就非要帶執行緒2個字。
uj5u.com熱心網友回復:
其實這個屬于“限流”操作,限流手段很多,池化只是其中之一SemaphoreSlim則是池化控制實作的基本因為不知道具體環境,我們可以在nuget查找相關成品 關鍵字RateLimiter
https://www.nuget.org/packages?q=RateLimiter
如果是webapi,nuget也有實作的好的叫 WebApiThrottle
uj5u.com熱心網友回復:
用戶端是windows服務??那就是服務器端之間傳視頻檔案了,用socket傳的?自已控制連接數就行了,超過就拒絕Accept,如果客戶端斷開連接,連接數減1.傳完后,也可以在服務器端主動斷開連接,連接數減1.uj5u.com熱心網友回復:
不清楚這個socket。。。感謝,我去看一看uj5u.com熱心網友回復:
感謝,不過現在這個是內網環境,找不了東西。。。uj5u.com熱心網友回復:
啊,是一種通信方式,我們用的是webservice。。。uj5u.com熱心網友回復:
服務端做限制呀,通常Web服務器自帶有設定的,另外,如果手動寫的服務,Socket服務啟動前可以設定接收客戶端連接數的.uj5u.com熱心網友回復:
我的寫法,如果真的只是個限制數量的話。使用APPLICATION一下子搞定了。簡單方便。完成一個減一個。就這樣
uj5u.com熱心網友回復:
感謝,我現在寫的是lock里用Interlocked.Increment的方式限制數量,不知道測起來能用不,我再找找試試application,看看咋樣吧轉載請註明出處,本文鏈接:https://www.uj5u.com/net/9884.html
標籤:C#
