Reactor, Proactor并发模式与高性能视频服务器


概述

本文先从理论上介绍几种大并发服务器的设计模式,然后分析Darwin Streaming Server的实现,从而为更好的理解Darwin视频服务器或者设计自己的视频服务器提供技术上的积累。


并发设计模式

阻塞的IO方式效率极低,这里不予讨论。非阻塞的IO分成两种,分别是非阻塞同步IO和非阻塞异步IO,对应的,Reactor和Proactor是高性能并发服务器设计中常见的两种模式,Reactor用于同步IO,Proactor用于异步IO。

 

 

 

无论是Reator还是Proactor,都包含了时间分离器和时间处理器。在接下来的对于Darwin视频服务器的分析中会发现其中也包含了事件分离器和事件处理器。


Darwin流媒体服务器

来看一下DarwinStreamingServer的架构,是不是采用了前面描述的两个模式那。Darwin流媒体服务器是由父进程及其fork出来的子进程构成的,子进程就是核心服务器。父进程的职责就是等待子进程退出。如果子进程出错退出,则父进程就会fork一个新的子进程,从而保证视频服务器继续提供服务。核心服务器的作用是充当VOD客户端与服务器模块之间的接口,VOD客户端采用RTP和RTSP协议向服务器发送请求并接收响应,服务器模块负责处理VOD客户端的请求并向VOD客户端发送数据包。核心服务器通过创建四种类型的线程来完成自己的工作:

 

  1. 服务器的主线程(Main Thread)。这个线程负责检查服务器是否需要关闭、记录状态信息、打印统计信息。
  2. 空闲任务线程(Idle Task Thread)。空闲任务线程管理一个周期性的任务队列。任务队列有两种类型:超时任务和套接口任务。
  3. 事件线程(Event Thread)。事件线程负责侦听套接口事件,比如收到RTSP请求和RTP数据包,然后把事件传递给任务线程。 
  4. 一个或者多个任务(Task)线程。任务线程从事件线程中接收RTSP和RTP请求,然后把请求传递到恰当的服务器模块进行处理,把数据包发送给客户端。缺省情况下,核心服务器为每一个处理器创建一个任务线程。

其中的事件线程就是Reactor模式中的事件分离器,任务线程就是Reactor中的事件处理器。


参考资料

  1. Proactor和Reactor模式_继续并发系统设计的扫盲,http://www.cppblog.com/kevinlynx/archive/2008/06/06/52356.html
  2. QuickTime Streaming Server Modules Programming Guide。
  3. Douglas C. Schmidt, Reactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值