標籤:
1. 概述
在live555-Server庫中,使用單線程實現了多使用者請求視頻資料,這似乎多線程才能實現的功能,並且使用者請求視頻資料各個流程銜接的都十分完美,其執行效率非常高。
live555是如何?單線程的?其動力系統有什麼借鑒的地方?
2. 動力系統原理
一個無關的話題:
某人A有一堆任務要辦理,但他一次只能辦理一個任務(單線程),有時辦理某一件任務會引發其他任務,有時別人還會繼續交代任務,而且任務有先後和輕重緩急之分。A如何將任務按照一定的規則辦理完畢。
A的安排如下:
將每一件獨立的任務寫在一個紙條上面,放入管理器中,每次從管理器中取一個最為緊急的紙條辦理;當辦理的任務引發了其他任務,則新寫一個紙條放入管理器中;如果有人交代新的任務,也新寫一個紙條放入管理器中。A在管理器中取紙條前,必須先問下有沒有人給他安排新的任務,這樣A就能及時接受別人安排的任務。
A的基本過程如:
這樣對A處理的每一個任務有一個嚴格要求,就是任務處理時間短,不能在處理任務的過程中等待或者睡覺。
任務的基本操作:
對於放入列表中的任務,每次取出任務前需要同步任務,並不是按順序取出的。
對應關係如下:
主題迴圈對應BasicTaskScheduler::SingleStep函數。
1. 詢問是否有人安排任務:
選擇socket部分,select函數。這邊需要瞭解select函數的使用。
2.工作管理員對應fDelayQueue變數,在管理器中取任務處理對應fDelayQueue.handleAlarm()
3. 放任務到管理器中對應
envir().taskScheduler().scheduleDelayedTask函數
對於live555有什麼其他疑問,請發郵件到[email protected],我們大家一塊討論。
轉自:http://blog.csdn.net/wjh_monkey/article/details/42024427
(轉)Live555單線程原理