[置顶] Nginx 多进程连接请求/事件分发流程分析

摘要: Nginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件。本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候借鉴。一、监听建立流程整个建立监听socket到accept的过程如下图:说明:1.main里面调用... 阅读全文

posted @ 2015-11-25 16:18 BestWill 阅读(7487) 评论(3) 推荐(2) 编辑

2017年4月29日

连麦方案中各条流之间时间戳同步问题

摘要: 在现今如火如荼的直播热潮中,最新的技术趋势是多用户之间进行连麦交互。连麦技术需要处理很多问题,包括音视频的解码及重新编码,音频重采样,视频帧率重采样,音视频同步等。其中的音视频同步包括合并后的流中的音视频时间同步,也包括多个连麦用户之间流的时间同步问题。这里讨论多个连麦用户之间的流时间同步问题。 这 阅读全文

posted @ 2017-04-29 19:08 BestWill 阅读(875) 评论(0) 推荐(0) 编辑

2017年4月21日

音视频重新编码时间戳同步问题

摘要: 在对音视频重新编码并需要进行同步的场景中,需要遵守几项基本原则(否则音视频就会卡顿,不流畅。以音频aac编码频率44.1k,视频h264编码25帧帧率为例):1. 保证输入端的音视频帧到达间隔基本精确。音频aac每帧时长是23.2ms(1000*1024/44100),视频每帧时长是40ms(100 阅读全文

posted @ 2017-04-21 17:00 BestWill 阅读(1506) 评论(0) 推荐(0) 编辑

2017年2月11日

基于网络流音视频包的音视频解码思路

摘要: 本篇文章对自己项目中的网络媒体流解码流程进行了梳理和总结。本文中的方法不同于一般打开文件或流进行读写的流程,不需要通过avformat_open_input,avformat_find_stream_info等操作获取AVFormatContext,然后遍历不同流信息。此处直接通过解析音视频sequ 阅读全文

posted @ 2017-02-11 17:25 BestWill 阅读(1603) 评论(0) 推荐(0) 编辑

2016年12月12日

协程库st(state threads library)原理解析

摘要: 协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。 这里有一个基本的协程例子 http://www.csl.mtu.edu/cs4411.ck/www/NOTES/non-lo 阅读全文

posted @ 2016-12-12 22:17 BestWill 阅读(9148) 评论(0) 推荐(4) 编辑

2016年5月10日

PyCharm/IntelliJ IDEA Golang开发环境搭建(最方便快捷的GO语言开发环境)

摘要: IntelliJ太牛了。为了配置Go语言开发环境,折腾了半天,下IDE(Sublime Text,IntelliJ Idea),然后装Go插件。装Go插件还要下载插件项目源码,编译等等,Sublime还要输入python脚本,粘进去通不过,头疼。 突然悟出一个道理,如果你觉得当前手上的事情变得非常痛 阅读全文

posted @ 2016-05-10 21:46 BestWill 阅读(44050) 评论(1) 推荐(2) 编辑

2015年12月5日

Linux TCP拥塞控制算法原理解析

摘要: 这里只是简单梳理TCP各版本的控制原理,对于基本的变量定义,可以参考以下链接:TCP基本拥塞控制http://blog.csdn.net/sicofield/article/details/9708383TCP中RTO计算http://www.tuicool.com/articles/Yn6vErT... 阅读全文

posted @ 2015-12-05 23:47 BestWill 阅读(7477) 评论(0) 推荐(1) 编辑

2015年11月30日

Linux System V Semaphore semget多进程同时创建缺陷解决方法

摘要: System V Semaphore的创建过程缺陷是创建与赋初值由两个函数完成,这会导致两个进程同时创建的话会出现竞争和不一致状态,即使是使用了IPC-EXCL标记。示例: 1 oflag = IPC-CREAT | IPC-EXCL | SVSEM-MODE; 2 if ( (semid = se... 阅读全文

posted @ 2015-11-30 11:37 BestWill 阅读(912) 评论(0) 推荐(1) 编辑

2015年11月28日

Condition Variable使用及其Thread Cancellation线程取消

摘要: 条件变量Condition Variable的一般用法:唤醒用法: 1 struct { 2 pthread_mutex_t mutex; 3 pthread_cond_t cond; 4 //whatever variables maintain the condition... 阅读全文

posted @ 2015-11-28 22:13 BestWill 阅读(603) 评论(0) 推荐(1) 编辑

2015年11月26日

Linux select/poll和epoll实现机制对比

摘要: 关于这个话题,网上已经介绍的比较多,这里只是以流程图形式做一个简单明了的对比,方便区分。 一、select/poll实现机制 特点: 1.select/poll每次都需要重复传递全部的监听fd进来,涉及用户空间和内核直接的数据拷贝。 2.fd事件回调函数是pollwake,只是将本进程唤醒,本进程需 阅读全文

posted @ 2015-11-26 01:18 BestWill 阅读(4601) 评论(0) 推荐(2) 编辑

导航