日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1

發(fā)布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇我們大致的了解了幾種聊天室的行為模式

最簡單明了的推模式 幾乎不需要任何多余的語言來描述它的實現(xiàn)

這一篇我們看看如何實現(xiàn)拉模式更有效。

??

??

??

???

???

本圖清晰的表現(xiàn)了""模式聊天室的行為。

  • 并發(fā)多用戶向數(shù)據(jù)池寫數(shù)據(jù)
  • 并發(fā)多用戶從數(shù)據(jù)池讀書據(jù)
  • 數(shù)據(jù)最好以時間為順序儲存在集合中
  • 某時間向后的枚舉查找將是最大的消耗。

??

??

聊天室進化 -女仆編年史

神秘的原始社會

仍然參考我們神奇樸素的Asp3聊天室

53???? Application.lock
54???????? Application("show5")=Application("show4") '
一條新信息駕到 第五條信息被淘汰
55???????? Application("show4")=Application("show3")
56???????? Application("show3")=Application("show2")
57???????? Application("show2")=Application("show")
58???????? Application("show")=NewMessage???? '
其他所有的信息向前移動一次給新的信息讓個位置。
59???? Application.UnLock
60???? Response.Write Application("show5")
61???? Response.Write Application("show4") '
由于是postback 模式 必須輸出歷史n行數(shù)據(jù)
62???? Response.Write Application("show3")
63???? Response.Write Application("show2")
64???? Response.Write Application("show")

從線程安全角度來說 本來 response.write應(yīng)該也在 application .lock 塊中? 或者分開兩個lock塊.? 但是這里由于response.write 在非cache模式下可能帶來的時間延遲 作者煞費苦心的把他們從安全鎖中移動出來.在實際運行中 很可能出現(xiàn)丟話或者重復(fù)發(fā)言的狀況

application究竟 被人做了些什么? 沒有邊界? 沒有抽象包裝的這個實現(xiàn)就好像原始共產(chǎn)主義 誰是誰的誰啊這都是!

??

?

私有制出現(xiàn),奴隸社會 LOCK~ 這個女奴是我的~

翻譯成c# 我們可以看到一個比較容易理解的邏輯 當然這個代碼稍微有所修改 兩個鎖很明確 很完美的把數(shù)據(jù)和線程排起了隊伍

??

Code Snippet

  • ?????? class Channel
  • ??????? {
  • ??????????? Queue<string> MessageQ = new Queue<string>();
  • ??????????? public void Say(string message) //寫信息
  • ??????????? {
  • ??????????????? lock (MessageQ)
  • ??????????????? {
  • ??????????????????? MessageQ.Enqueue(message);
  • ??????????????????? while (MessageQ.Count > 5)? // 刪多余
  • ??????????????????? {
  • ??????????????????????? MessageQ.Dequeue();
  • ??????????????????? }
  • ??????????????? }
  • ??????????? }
  • ??????????? public string[] Listen() //\u-28781 ?出所有
  • ??????????? {
  • ??????????????? lock (MessageQ)
  • ??????????????? {
  • ??????????????????? return MessageQ.ToArray();
  • ??????????????? }
  • ??????????? }
  • ???????? }
  • ??

    在aspx可能這樣調(diào)用

    Code Snippet

  • ??????????? Channel cr = session["Chat"];
  • ??????????? cr.Say(Request["text"]);
  • ??????????? foreach (var s in cr.Listen())
  • ??????????? {
  • ??????????????? Response.write("<p>");
  • ??????????????? Response.write(s);
  • ??????????????? Response.write("</p>");
  • ??????????? }
  • ?

    看起來圓滿完成任務(wù) 但是里面充滿了曖昧????

    ?

    類似事務(wù) 或者訪問非托管資源 在訪問線程臨界資源的時候有個原則

    你盡可能的晚鎖 盡可能的早釋放,

    看看剛剛做了些什么

    Oh My God

    我們可憐的Channel阿? 他被全程鎖定。好像一個被老爺少爺輪流調(diào)教的女奴啊,真讓我等正人君子心潮澎湃~~? 啊不對? 是于心不忍。

    由于每個調(diào)教者在調(diào)教前聲明:這個女奴是“我雷瓦Mono”我的東西! 所以在調(diào)教者聲明 這個女仆“亞沒漏”不要了之前 誰也不許碰!

    LOCK LOCK~

    這才是兩個主人并發(fā)訪問? 就已經(jīng)造成了這么多等待,如果是100主人個并發(fā)調(diào)教,那得是多么壯觀的隊伍!

    我們的服務(wù)程序如果按照這個效率編寫 恐怕cpu占用25%的時候就會崩潰---線程隊列的極限是多少?? 按照Jeffery Richard 的話說 你提出這個問題的時候 就已經(jīng)Very Very Wrong鳥。

    換句話說,不要挑戰(zhàn)爺們的耐性,后果很嚴重

    ?

    ?

    社會要進步 人民要革命? 封建時代來臨

    我們不能滿足這樣的性能

    老爺調(diào)教女奴的時候少爺不觀摩 這我們理解,(寫的時候加lock防止別的線程讀)

    少爺和女仆喝茶的時候? 老爺不能亂入開始餐廳調(diào)教,這我們也接受 (讀的時候加lock防止別的線程寫)

    ?

    但是少爺們找女奴喝茶,沒有道理不可以一起開茶話會吧!

    從某種意義上,只要集合元素不變化的話, Queue對象是支持安全的并發(fā)讀的,為什么幾個線程都在讀取的狀況下,我們還要繼續(xù)上鎖彼此排斥對方呢? 我們只是純粹對女仆有愛,沒什么不可以光明正大的吧!

    把鎖從完全鎖變成讀寫鎖,能夠有效的減少很多不需要的等待。——? 我們可以把喝茶的隊伍縮短!

    ?

    Code Snippet
  • ?????? class ChannelReadWriteLock
  • ????????{
  • ????????????Queue<string> MessageQ = new Queue<string>();
  • ????????????System.Threading.ReaderWriterLockSlim _lock = new System.Threading.ReaderWriterLockSlim();
  • ????????????public void Say(string message) //寫信息
  • ????????????{
  • ????????????????_lock.EnterWriteLock();
  • ????????????????
  • ????????????????????MessageQ.Enqueue(message);
  • ????????????????????while (MessageQ.Count > 5)??// 刪多余
  • ????????????????????{
  • ????????????????????????MessageQ.Dequeue();
  • ????????????????????}
  • ????????????????_lock.ExitWriteLock ();
  • ????????????}
  • ????????????public string[] Listen() //?? \u-29701 ?所有
  • ????????????{
  • ???????????????? _lock.EnterReadLock ();
  • ??????????????????var ary= MessageQ.ToArray();
  • ????????????????_lock.ExitReadLock();
  • ????????????????return ary;
  • ????????????}
  • ????????\
  • 這是女仆界的勝利 她不再是一個人(的人) 而是可以和人socal的普通人了? 雖然還在封建家長制的陰影下,仍然是被剝削被蹂躪的底層民眾,但是她已經(jīng)具有了比以前更大的自由!

    ?

    先寫到這里看看和諧底限 敬請期待?? 女仆編年史2

    轉(zhuǎn)載于:https://www.cnblogs.com/waynebaby/archive/2009/08/21/1551761.html

    總結(jié)

    以上是生活随笔為你收集整理的游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。