(转)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 ...
随机推荐
- Ctex中WinEdt经常弹出注册小窗口 解决办法
使用WinEdt 7避免跳出“注册对话框” 在options菜单下点options…,在advanced configuration => Event Handlers 下点Exit, 在 ...
- javascript基础拾遗(七)
1.对象的继承__proto__ var Language = { name: 'program', score: 8.0, popular: function () { return this.sc ...
- filezilla修改默认21端口
一.filezilla修改端口21 1.修改ftp端口号,例如我们想把21修改成888 2.修改数据端口号为N-1,即888-1=887 3.防火墙中开启端口888和887 完成一个FTP的传输过程不 ...
- Asp.Net IIS7.5伪静态设置
注意:先要将应用池设置为集成模式,修改OK后,再改成经典模式.否则,什么托管程序出不来. 1.新建网站,这里不做介绍,很简单.并把网站设置为集成模式 2.添加通配符脚本映射 打开之后显示如下界面,在右 ...
- 【机器学习】K-Means算法
K-Means算法是一种cluster analysis的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法. 问题 K-Means算法主要解决的问题如下图所示.我们可以看到, ...
- spring util list
spring 3.0 after <util:list/>元素 借助<list/>元素,开发者能够定义java.util.List集合.下面摘录了list.xml中的配置信息. ...
- s3c2440——swi异常
系统复位的时候,从0地址开始执行,这个时候系统处于svc管理模式. 一般而言,我们的app应用程序是处于用户模式的,但是用户模式不能访问硬件,必须处于特权模式才可以.所以这里我们用swi软中断方式来实 ...
- Android开发(七)——判断网络状态
项目中难免会出现使用网络的情况,使用网络前得进行网络判断,看网上的网友一般有多种实现版本. 第一种: // 是否有网络连接 public static boolean isNetworkConnect ...
- 3. EM算法-高斯混合模型GMM
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 GM ...
- java判断是移动端还是pc端
// \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔), // 字符串在编译时会被转码一次,所以是 "\\b" // \B 是单词内部逻辑间隔(连着的 ...