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流媒体服务器在网络处理的效率上提 ...
随机推荐
- net1:DateTime,Application与Session,
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- css3 boxing-sizing属性
boxing-sizing: 1.content-box 计算宽度不包含padding和border宽度 2.border-box border和padding计算入width之内 3.padding ...
- 线程间通过PostMessage通信
1.查看TMS项目中的相关实例 ::PostMessage(hWnd, WM_USER_MSG_REFRESH_UI, (WPARAM)UMP_REFRESH_MEMBER_INFO, 0); 参考文 ...
- fuelgauge
void fg_init(void *queue, void (*bs_fuel_gauge_status)(void)) { fg_init_ready = bs_fuel_gauge_status ...
- Tomcat是怎么工作的(1) -- 开篇
这是一个系列文章的第一篇. 标题还是费了点脑子才确定的,起什么名字比较好呢.Tomcat工作原理?深入浅出Tomcat运行机制?从零开始研究Tomcat?Tomcat是怎么运行起来的?Tomcat是如 ...
- hdu4635 有向图最多添加多少边使图仍非强连通
思路:先缩点成有向无环图,则必然含有出度为0的点/入度为0的点,因为要使添加的边尽量多,最多最多也就n*(n-1)条减去原来的m条边,这样是一个强连通图,问题转化为最少去掉几条,使图不强连通,原来图中 ...
- python 中各种数据类型的排序问题
list #按照list的第二键值排序 disP2P = [[1,2,3],[2,3,4],[4,5,6]] disP2P = sorted(disP2P,key = lambda x:x[2]) s ...
- [Bzoj4942][Noi2017]整数(线段树)
4942: [Noi2017]整数 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 363 Solved: 237[Submit][Status][D ...
- Codechef FNCS Chef and Churu
Disciption Chef has recently learnt Function and Addition. He is too exited to teach this to his fri ...
- 【java】httpclient的使用之java代码内发送http请求
场景: 需要本项目发送HTTP请求到另一个项目中,处理完成返回值给本项目. 1.本项目引入架包 <!-- httpclient 后台发送http请求--> <dependency&g ...