EasyDarwin流媒体服务器高性能优化方向
来源:互联网 发布:负反馈放大器实验数据 编辑:程序博客网 时间:2024/05/18 09:21
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)进行响应包的发送,这样就能够形成一个消息异步处理的流程,对整个流媒体服务器又将是一个量级的提升!
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016
- EasyDarwin流媒体服务器高性能优化方向
- EasyDarwin流媒体服务器高性能优化方向
- 【EasyDarwin】流媒体服务器部署
- EasyDarwin流媒体服务器
- easydarwin流媒体服务器
- 开源流媒体服务器EasyDarwin支持epoll网络模型,大大提升流媒体服务器网络并发性能
- 开源流媒体服务器EasyDarwin支持epoll网络模型,大大提升流媒体服务器网络并发性能
- 用EasyDarwin开发分布式流媒体服务器
- easyDarwin流媒体
- EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计
- EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计
- EasyDarwin开源流媒体服务器性能优化之Work-stealing优化方案
- EasyDSS高性能流媒体服务器前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
- 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间
- 高性能,高并发通信服务器研究方向
- EasyDarwin开源流媒体服务器高性能设计之无锁队列
- MySQL服务器性能优化--《高性能MySQL》
- 高性能流媒体服务器-nebula之数据结构(2)--pairing heap
- 周计划 补完工程 第十周 python进阶(1)
- Unity 各个方面的性能优化
- 无序数组中,三个数的乘积最大
- 生活日记1
- 647.Palindromic Substrings(动态规划)
- EasyDarwin流媒体服务器高性能优化方向
- 浅谈App原生开发、混合开发及HTML5开发的优劣
- Codeforces 868 D. Huge Strings 字符串思维乱搞
- android开发-Hashmap源码解析
- Golang http 建立Web服务器
- 线性表
- construct2 创立射击小游戏
- Windows下安装git
- mnist文件提取成bmp(matlab代码)