代码改变世界

TCP/IP之TCP_NODELAY与TCP_CORK

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

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

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

Boost条件变量condition_variable_any

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

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

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

解决使用Skia图形库时遇到的几个问题

2016-12-16 19:43 by Shdjgrwjdbd, 5376 阅读, 0 推荐, 收藏,
摘要:Skia是一个开源的2D图形库,提供通用的API,适用于工作中遇到的各种硬件和软件平台。这是谷歌浏览器Chrome OS,Android的图形引擎,Mozilla Firefox浏览器和Firefox OS,和许多其他产品。 官方网站:https://skia.org/ 编译及配置方法可以参考Ski 阅读全文

C++11之lambda表达式

2016-12-11 16:41 by Shdjgrwjdbd, 1784 阅读, 0 推荐, 收藏,
摘要:lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象。lambda表达式的类型在C++11中被称为“闭包类型”,也可以理解为是一个仿函数(带operator()类),其语法形式如下: [capture] (params) opt -> r 阅读全文

反应器(Reactor)和主动器(Proactor)

2016-12-10 20:20 by Shdjgrwjdbd, 1689 阅读, 0 推荐, 收藏,
摘要:网络方面用的比较多的库是libevent和boost.asio,两者都是跨平台的。其中libevent是基于Reactor实现的,而boost.asio是基于Proactor实现的。Reactor和Proactor模式的主要区别就是真正的操作(如读/写)是由谁来完成的,Reactor中需要应用程序自 阅读全文

快速排序及STL中的sort算法

2016-12-08 23:15 by Shdjgrwjdbd, 4124 阅读, 0 推荐, 收藏,
摘要:快速排序基本思想是,对待排序序列进行划分(Partition),一次划分,选择一个元素作为枢轴,然后将所有比枢轴小的元素放到枢轴的左边,将比枢轴大的元素放到枢轴的右边。然后对该枢轴划分的左右子序列分别再进行划分,如此递归。Partition是一个非常重要的概念,因为它只需要O(n)的时间复杂度就可以 阅读全文

设计模式之代理模式

2016-12-06 22:12 by Shdjgrwjdbd, 598 阅读, 1 推荐, 收藏,
摘要:代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用场合,第一,远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实;第二,虚拟代理,是根据需要创建开销很大的对象。通过它来存在实例化需要很长时间的真实对象;第三,安全代理,用来控制真 阅读全文

C++11之std::function和std::bind

2016-12-06 21:30 by Shdjgrwjdbd, 24851 阅读, 5 推荐, 收藏,
摘要:std::function是可调用对象的包装器,它最重要的功能是实现延时调用: 由上边代码定义std::function<int(int)> fr2,那么fr2就可以代表返回值和参数表相同的一类函数。可以看出fr2保存了指代的函数,可以在之后的程序过程中调用。这种用法在实际编程中是很常见的。 std 阅读全文