代码改变世界

算法的泛化过程(摘自《STL源码剖析》)

2017-02-08 22:13 by jiayayao, 1095 阅读, 0 推荐, 收藏, 编辑
摘要:将一个叙述完整的算法转化为程序代码,不是什么难事。然而,如何将算法独立与其所处理的数据结构之外,不受数据结构的羁绊呢?换个说法,如何将我们所写的程序算法适用于任何(或者大部分)未知的数据结构(比如array,vector,list等)呢? 关键在于,只要把操作对象的型别加以抽象化,把操作对象的标示法 阅读全文

使用Boost asio实现异步的TCP/IP通信

2017-01-08 21:23 by jiayayao, 16611 阅读, 1 推荐, 收藏, 编辑
摘要:可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信: 服务器: 客户端: 阅读全文

Boost asio基本概念

2017-01-08 15:36 by jiayayao, 5430 阅读, 0 推荐, 收藏, 编辑
摘要:asio库基于操作系统提供的异步机制,采用前摄器模式(Proactor)实现可移植的异步(或同步)IO操作,不需要使用多线程和锁,有效避免多线程编程带来的诸多有害副作用(如竞争,死锁)。 asio封装了操作系统的select、kqueue、poll/epoll、overlapped I/O等机制,实 阅读全文

Boost信号/槽signals2

2017-01-03 20:18 by jiayayao, 10323 阅读, 1 推荐, 收藏, 编辑
摘要:信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便。项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定。 signals2基于Boost里另一个库signals实现了线程安全的观察者模式。signal中一个比较重要的 阅读全文

如何判定一颗树是完全二叉树和满二叉树

2016-12-25 00:23 by jiayayao, 9253 阅读, 0 推荐, 收藏, 编辑
摘要:满二叉树:一颗深度为k且有2^k-1个节点的二叉树称为满二叉树; 完全二叉树:对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左至右。深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树编号从1至n的结点对应时,称为完全二叉树。如图所示: 1. 判定完全二叉树。判 阅读全文

RTP与RTCP协议介绍(转载)

2016-12-24 21:41 by jiayayao, 2179 阅读, 0 推荐, 收藏, 编辑
摘要:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等 阅读全文

TCP/IP之TCP_NODELAY与TCP_CORK

2016-12-24 16:35 by jiayayao, 1351 阅读, 0 推荐, 收藏, 编辑
摘要:TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法。这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagle 算法。禁止Nagle后应用程序向内核递交的每个数据包都会立即发送出去。但是禁止Nagle,网络传 阅读全文

TCP/IP之Nagle算法与40ms延迟

2016-12-24 16:15 by jiayayao, 3392 阅读, 0 推荐, 收藏, 编辑
摘要:Nagle算法是针对网络上存在的微小分组可能会在广域网上造成拥塞而设计的。该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组确认到达之前不能发送其他的小分组。同时,TCP收集这些少量的分组,并在确认到来时以一个分组发出去。它的设计规则如下: (1)如果包长度达到最大报文长度( 阅读全文

Boost条件变量condition_variable_any

2016-12-20 18:06 by jiayayao, 8730 阅读, 0 推荐, 收藏, 编辑
摘要:Boost条件变量可以用来实现线程同步,它必须与互斥量配合使用。使用条件变量实现生产者消费者的简单例子如下,需要注意的是cond_put.wait(lock)是在等待条件满足。如果条件不满足,则释放锁,将线程置为waiting状态,继续等待;如果条件满足,则重新获取锁,然后结束wait,继续向下执行 阅读全文

Live555流媒体服务器编译(Windows下)

2016-12-19 00:03 by jiayayao, 7370 阅读, 0 推荐, 收藏, 编辑
摘要:live555是一套使用使用开放的标准协议(RTP/RTCP、RTSP、SIP)来处理多媒体流数据的开源C++库,使用LGPL协议。这些库可以编译为Unix(包括Linux和Mac OS X),Windows,和QNX(和其他POSIX系统)来构建流媒体应用。live555已经被用于如“Live55 阅读全文