(转)Live555单线程原理
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有什么其他疑问,请发邮件到wjh_2010@163.com,我们大家一块讨论。
转自:http://blog.csdn.net/wjh_monkey/article/details/42024427
(转)Live555单线程原理的更多相关文章
- Redis单线程原理
redis是以socket方式通信,socket服务端可同时接受多个客户端请求连接,也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行. 假设,现在有A,B ...
- js内部事件机制--单线程原理
原文地址:https://www.xingkongbj.com/blog/js/event-loop.html http://www.haorooms.com/post/js_xiancheng ht ...
- android 多线程
本章讲述在android开发中,多线程的应用.多线程能够处理耗时的操作并优化程序的性能.本章主要介绍知识点,AsyncTask,Java线程池,ThreadPoolExecutor线程池类.本章案例只 ...
- ng-style 的坑 - 对性能的影响
本文地址:http://www.cnblogs.com/jying/p/5633203.html 熟悉 angular 的前端对ng-style 一定不陌生,这个家伙可以绑定一个函数,使得我们可以在函 ...
- React 新特性学习
1 context 2 contextType 3 lazy 4 suspense 5 memo 6 hooks 7 effect hooks =========== 1 Context 提供了一种方 ...
- 图解NodeJS【基于事件、回调的单线程高性能服务器】原理
刚开始了解Node感觉很吊,各种说高性能,可是一直不理解为什么单线程会比多线程快?为什么异步IO比非阻塞IO快?因此,本篇在阅读相关书籍后,根据自己的理解,整理此文,如有错误,仅代表理论不精,必当修改 ...
- Javascript引擎单线程机制及setTimeout执行原理说明
setTimeout用法在实际项目中还是会时常遇到.比如浏览器会聪明的等到一个函数堆栈结束后才改变DOM,如果再这个函数堆栈中把页面背景先从白色设为红色,再设回白色,那么浏览器会认为DOM没有发生任何 ...
- 网络编程 -- RPC实现原理 -- NIO单线程
网络编程 -- RPC实现原理 -- 目录 啦啦啦 Class : Service package lime.pri.limeNio.optimize.socket; import java.io.B ...
- JavaScript的单线程性质以及定时器的工作原理
前些日子还在网上争论过js动画用setTimeout还是setInterval,个人偏向于setTimeout,当动画中牵扯到ajax时用setInterval会有时间偏差,出现一些问题即使用clea ...
随机推荐
- (原创)c++11中 function/lamda的链式调用
关于链式调用,比较典型的例子是c#中的linq,不过c#中的linq还只是一些特定函数的链式调用.c++中的链式调用更少见因为实现起来比较复杂.c++11支持了lamda和function,在一些延迟 ...
- Android Manifest <meta-data>
在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义: <!-- appid --> <meta-data android:nam ...
- 【ARM】2410裸机系列-ADC数模转换
开发环境 1.硬件平台:FS2410 2.主机:Ubuntu 12.04 ADC寄存器配置 1.初始化ADC(ADCCON) 设置预分频,预分频因子,选择A/D转换通道,并选择正常模式 ...
- js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小
方法一: js: /** * 上传图片本地预览方法 * @param {Object} fileObj 上传文件file的id元素 fresh-fileToUpload * ...
- JAVA-数据库之Statement对象
相关资料:<21天学通Java Web开发> 语句对象Statement1.语句对象Statement可以用来执行SQL语句,从而实现数据库操作.2.可以通过调用连接对象的createSt ...
- corntab被黑记录
多出来的corntab 最近服务器经常出现负载过高的情况,经过运维排查,出现了一个corntab定时任务 不是开发的锅,别背 一开始运维认为是这个定时任务是我们开发的. 排查后,明确了服务器是被黑了. ...
- laravel iis搭建
1.urlrewrite https://www.iis.net/downloads/microsoft/url-rewrite 2.安装phpmanager 3.目录定位到public 赋给iuse ...
- MAMP和WAMP搭建Web环境,数据库,数据分布可视化
MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...
- Android Retrofit2 数据解析
在弄数据解析这块,浪费了很长的时间,最开始一直觉得传过来用对象接收的,类型是json,往那个方式去想了.搞了很久. 后来看了别人写的才发觉,真是很简单,感谢 https://www.jianshu.c ...
- call_user_func_array 应用场景分析
1. 场景一 a.你要调用的函数名是未知的 b.要调用函数的参数类型及个数也是未知的 定时任务类需要定时运行一个函数,则接口就可以类似这样设计: /** * 在$run_time时刻运行$call_b ...