国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Live555學習筆記14-live555多線程論

2019-11-08 18:25:51
字體:
來源:轉載
供稿:網友
十四:live555多線程論江湖傳聞:live555如果不改為多線程,在多核心機器上效率會降低.雖然我沒做過測試,但比較相信此傳聞的真實性 .所以在我試論述一下live555如何對多核進行支持,其實就是改為多線程,嘿嘿.先看此文:http://www.live555.com/liveMedia/faq.html#threads跟據它的說法,live555改多線程似乎不難,因為所有全局性的東西幾乎都保存在UsageEnvironment的liveMediaPRiv和groupsockPriv中,groupsockPriv里面放所有的GroupSock,而liveMediaPriv指向了一個HashTab類:_Tables,_Tables中有兩個變量:mediaTable和socketTable.分別指向兩個Hash Tab,mediaTable中存放所有從Meduim派生出來的類對象,socketTable存放的是StreamSocket們(我猜的,嘿嘿),比如SocketDescriptor.總之,全局性的東西們都放在UsageEnvironment內.所以,如果開了多線程,為每個線程創建一個UsageEnvironment,然后調用各自UsageEnvironment的TaskSchedule的EventLoop(),理論上應該能實現各線程各自為戰,互不干擾.但是RTSPServer卻只能有一個,所以,各線程之間還必須有少量的交集.而且,RTSPServer最好單獨放在一個線程中吧?因它總攬全局,所以正好放在主線程中.當然主線程也要有自己的UsageEnvironment和event loop.如果真的實現了多線程,我們完全可以跟據CPU的數量確定線程的個數.那在什么時機,如何創建新線程呢?想一下各RtspClientsession 的創建過程:RTSPServer收到新客戶端請求后,先創建與客戶對應的RTSPClientSession,RTSPClientSession在收到DESCRIBE請求后查找對應的ServerMediaSession,如果找不到,就創建一個新的,那么這幾個對象的創建過程,從哪個開始進入新線程呢?其實從RTSPClientSession開始,就可以放入新線程中,無非是RTSPServer要操作RTSPClientSession時進行同步保護而已.但是我還發現一個問題,那就是RTSPServer中并沒有保存RTSPClientSession的列表.RTSPClientSession被創建出來就不管了,哦!從RTSPClientSession開始進入另外線程真是絕佳的時機!那RTSPClientSession被保存在哪里呢?它其實最終被保存在ServerMediaSusession的stremstate中了.當一個流播放完畢時,它自然就要被銷毀了,是吧?但是還有問題:RTSPServer中還擔負者查找所有ServerMediaSession的任務,當然它是受RTSPClientSession委托的,因為ServerMediaSession們保存在RTSPServer中是理所當然的事.如果RTSPClientSession在不同的線程中呢?RTSPClientSession再查找ServerMediaSession就要進行同步保護了.還有個更嚴重的問題:我們希望把各個StreamState分散到不同的線程中,但它們又被保存在ServerMediaSub session中,麻煩又來了...如果把ServerMediaSession保存到不同的線程中呢?看起來是可以的!但是又帶來了問題,一個線程中的RTSPClientSession只能在自己線程的ServerMediaSession列表中查找是否已存在某個ServerMediaSession,其它線程中即使已存在了,也不能用,只能另創建一個,因為RTSPClientSession在被創建后應馬上找到其UsageEnvironment,否則它就不能利用event loop接收數據了.所以ReuseSource是否能真正起作用,只能靠運氣了.可不可以這樣:先在主線程中執行RTSPClientSession的OPTION和DESCRIBE響應,再跟據其ServerMediaSession所在的線程,把它移到那個線程中去?我認為,這是完全能夠做到的!看起來這樣做,似乎有點完美了....當然真正的實現上,如果能做到各線程之間的交互只是把DelayTask Handle放到目的線程的EventLoop中的話,并行計算的能力就真的要發揮出來了.在此拋磚引玉,望有人拍磚.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河津市| 蓬安县| 陆丰市| 康马县| 共和县| 嵩明县| 内黄县| 天津市| 平江县| 临漳县| 萨嘎县| 昌吉市| 汾西县| 松桃| 思南县| 高密市| 德惠市| 连云港市| 北宁市| 承德市| 伊川县| 镇原县| 东丰县| 宁都县| 新丰县| 呈贡县| 全州县| 绍兴县| 喀喇沁旗| 滦南县| 酒泉市| 寿光市| 韩城市| 徐州市| 镇安县| 扎鲁特旗| 东安县| 澳门| 嘉黎县| 洛阳市| 青阳县|