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流媒体服务器在网络处理的效率上提 ...
随机推荐
- java内部类的四大作用
一.定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所 ...
- Ruby自动化测试(操作符的坑)
事情是这样的: times++ @ddr = DDR::DDR.new() 执行到这里的时候,总是报错:'+@' undefied method.刚开始的时候以为是机器在重启过程中一些不稳定函数调用或 ...
- Purpose of XMLString::transcode
原文地址http://stackoverflow.com/questions/9826518/purpose-of-xmlstringtranscode I don't seem to underst ...
- iOS-开发者账号失效后是否还可以打包
参考链接:https://www.jianshu.com/p/601f596e8550
- AC日记——爱改名的小融 codevs 2967
2967 爱改名的小融 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 白银 Silver 题解 题目描述 Description Wikioi上有个人叫小融,他喜欢 ...
- IOS-input元素光标偏移乱跑,是什么原因
这中情况只会出现在一些ios手机上,是兼容性的问题,当然我没有认真的确认过是出现在那些ios系统上的: 之所以出现这种情况,肯定是在input上或TA的父元素上用到了position:fixed; 目 ...
- java 8 LocalDateTime 20 例
http://www.importnew.com/15637.html 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实 ...
- PAT1001~1005AC代码
晚上了,睡不着觉,做CF把,太累了,那就来几道乙级的编程小题吧. 1001.卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这 ...
- BZOJ 2131 [scoi2010] 传送带
@(BZOJ)[三分法] Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段. 两条传送带分别为线段AB和线段CD. lxhgww在AB上的移动速度为P,在CD上的移 ...
- iOS -- MBProgressHUB
高级: http://www.jianshu.com/p/485b8d75ccd4 //只有小菊花 - (void)indeterminateExample { // Show the HUD on ...