EasyDarwin流媒体服务器高性能优化方向
我们在EasyDarwin开源流媒体服务器上做了很多的优化,包括前面说到的《EasyDarwin开源流媒体服务器将select改为epoll的方法》、《EasyDarwin开源流媒体服务器高性能设计之无锁队列》,加入我们将EasyDarwin的处理流程分为2层,那么select/epoll、TaskThread任务队列就是第一层,这属于架构的较低层,以上的两个改造,大大提升了底层的效率,据测试,至少可以保证300w/s的处理速度,所以在某种程度上来说,底层已经不再是服务器性能处理的瓶颈了;
再到第2层,也就是RTSPSession层,由于EasyDarwin的消息处理在内部是由BlockingThreads来进行的,也就是说在EventThread将网络事件Task投递到TaskThread之后,TaskThread经过WaitForTask将Task(RTSPSession)从任务队列里面取出来,进行Task::Run()处理,这一步是阻塞的,在Run没有完全处理完成任务之前,整个TaskThread都被阻塞,只有处理完成当前的Task事务才能再去当前TaskThread的TaskQueue任务队列中获取Task处理,如果数据来源比较多,比较快,而Task::Run()执行比较慢,被阻塞,就会导致TaskQueue大量堆积,Task得不到及时处理,这样就算我们在线程池中开辟很多的线程,也不够用,目前我们只能通过保证RTSPSession::Run()快速处理来确保系统执行效率;
于是,我们初步设计出这样一种解决的方法:我们在第2层之上再加一层,第3层,RTSPSession::Run()主要进行的工作是将网络事件进行处理,例如进行数据包的读取,网络断开等工作,不进行数据包的处理,我们将数据包的处理,再通过任务队列的方式,投递到第3层进行处理,第2层在读取到数据、投递完成后,立即返回,保证底层线程执行效率,第3层如果资源充足,可以创造更多的TaskThread来执行具体的消息处理,处理完成再调用Task(RTSPSession)进行响应包的发送,这样就能够形成一个消息异步处理的流程,对整个流媒体服务器又将是一个量级的提升!
获取更多信息
Copyright © EasyDarwin.org 2012-2016
EasyDarwin流媒体服务器高性能优化方向的更多相关文章
- EasyDarwin开源流媒体服务器性能优化之Work-stealing优化方案
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52400226 EasyDarwin团队的Ba ...
- EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计
拉模式转发 拉模式转发,顾名思义就是服务器主动从源端(IPCamera.NVR.或者其他流媒体服务器)通过RTSP/RTP协议将流媒体音视频数据拉取到流媒体转发服务器,再通过内部分发调度机制,分发给请 ...
- EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器
在不断进行EasyDarwin开源流媒体服务器的功能和性能完善的同时,我们也配套实现了目前在安防和移动互联网行业比较火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 和 Ea ...
- Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量
前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category ...
- C#调用EasyPusher推送到EasyDarwin流媒体服务器直播方案及示例代码整理
博客一:转自:http://blog.csdn.net/u011039529/article/details/70832857 大家好,本人刚毕业程序猿一枚.受人所托,第一次写博客,如有错误之处敬请谅 ...
- EasyDarwin开源流媒体服务器高性能设计之无锁队列
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin任务队列实现 EasyDarwin的任务队列是通过OSQueue类来组织 ...
- EasyDarwin流媒体服务器实现关键帧推送功能
-本篇由团队成员Fantasy供稿! 功能背景 随着社会进步,人们对产品体验要求越来越高.EasyDarwin也不例外.为了能满足用户对链接服 后看到画面时间(也就是我们经常看到的起播时间)短的要求, ...
- EasyDarwin开源流媒体服务器将select改为epoll的方法
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听所有网络读写事件,Even ...
- 开源流媒体服务器EasyDarwin支持epoll网络模型,大大提升流媒体服务器网络并发性能
经过春节前后将近2个月的开发和稳定调试.测试,EasyDarwin开源流媒体服务器终于成功将底层select网络模型修改优化成epoll网络模型,将EasyDarwin流媒体服务器在网络处理的效率上提 ...
随机推荐
- SharePoint 2013 SSO-Secure Store Service在实际案例中的应用
文章目录: Secure Store Service介绍 Secure Store Service部署 Secure Store Service应用 之前有一篇博客讲到使用EMSManagedAPI操 ...
- php validator classes
<?php /** * 验证类 */ class Validator { /* 函数名称:isNumber 简要描述:检查输入的是否为数字 输入:string 输出:boolean */ pub ...
- 一款基于bootstrap的文件上传插件,现在很多手机webapp都在用
官网:http://plugins.krajee.com/file-input
- 模仿锤子手机的bigbang效果
<!DOCTYPE html> <html style="height: 100%"> <head> <meta http-equiv=& ...
- YUV和RGB格式分析【转】
转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...
- CSS-文本(中,英)
1.缩进文本:text-indent 2.水平对齐:text-align: left/center/right/justify(实现两端对齐文本效果) 3.字间隔:word-spacing(可以改变 ...
- [原创][FPGA]时钟分频之奇分频(5分频)
0. 简介 有时在基本模块的设计中常常会使用到时钟分频,时钟的偶分频相对与奇分频比较简单,但是奇分频的理念想透彻后也是十分简单的,这里就把奇分频做一个记录. 1. 奇分频 其实现很简单,主要为使用两个 ...
- luogu P2831 愤怒的小鸟
题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形 ...
- 51 NOD 1407 and and and and !!
首先与等于零 相当于要求 每一位 在选的数里都有至少一个在该位为 0.直接求这个不太好求,我们考虑容斥: 设F(s) 为 不合法的位的集合至少是s的方案数 ,某一位不合法当且仅当选的数在这一位都是 ...
- Java原子类及内部原理
一.引入 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作是原子操作.再比如:a++: 这个操作实际是a = a + ...