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流媒体服务器在网络处理的效率上提 ...
随机推荐
- LFYZOJ 104 Counting Swaps
题解 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath&g ...
- 标准C程序设计七---101
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- VirtualBox 與 Vmware 差異
VirtualBox 4.3.36_Ubuntu r105129 與 VMware® Workstation 12 Player 12.5.2 build-4638234, 分別在各自的 Ubunt ...
- PHP读取APK的包信息,包括包名,应用名,权限,LOGO等
[转]PHP读取APK的包信息,包括包名,应用名,权限,LOGO等 声明本文转自: 原文链接:https://www.jb51.net/article/53780.htm: 感谢分享! <?ph ...
- yii 数据save后得到插入id
$model->save();//得到上次插入的Insert id$id = $model->attributes['id'];如此很简单
- CodeForces 424D: ...(二分)
题意:给出一个n*m的矩阵,内有一些数字.当你从一个方格走到另一个方格时,按这两个方格数字的大小,有(升,平,降)三种费用.你需要在矩阵中找到边长大于2的一个矩形,使得按这个矩形顺时针行走一圈的费用, ...
- AC日记——圆桌聚餐 cogs 729
729. [网络流24题] 圆桌聚餐 ★★ 输入文件:roundtable.in 输出文件:roundtable.out 评测插件时间限制:1 s 内存限制:128 MB «问题描述: ...
- Xamarin.Forms的ActivityIndicator和ProgressBar比较
Xamarin.Forms的ActivityIndicator和ProgressBar比较 在Xamarin.Forms中,控件ActivityIndicator和ProgressBar都用来表示 ...
- Light oj 1013 - Love Calculator (LCS变形)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1013 题意: 给你两个字符串,让你构造出一个长度最小的字符串,且它的子序列包含 ...
- redis-bitmap 命令使用的一些帖子
https://segmentfault.com/a/1190000009841792?utm_source=tag-newest http://blog.csdn.net/lglgsy456/art ...