摘要: ngxin中为了加快内存分配的速度,引入了内存池, 大块申请, 减少分配次数, 小块分割, 极大的提高了内存申请速度, 另外一个用途就是省去了很多内存管理的任务,因为这里没有提供内存释放的功能,也就是说在pool中分配的内存,只有pool被销毁的时候才能释放掉,真正的还给系统, 因此全局的pool存... 阅读全文
posted @ 2015-10-09 14:40 蒲蜡 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 现代WEB服务器都支持大文件分段下载,加快下载速度,判断WEB服务器是否支持分段下载通过返回头是否有 Accept Ranges: bytes 字段.分段下载分为两种,一种就是一次请求一个分段,一种就是一次请求多个分段。下面会一一讲解。 请求分段中的一部分 请求头部添加如下字段,0 1024代... 阅读全文
posted @ 2015-09-25 09:57 蒲蜡 阅读(8054) 评论(0) 推荐(1) 编辑
摘要: 前言 Linux产生信号中断,会打断当前正在执行程序,转而执行信号处理函数,由于执行信号处理函数时,正常执行程序被挂起,信号处理函数怎么操作才能保证程序再次被唤醒后能够正常执行,下面我们看两个案例 案例一 void signal_handler() { printf("this is ... 阅读全文
posted @ 2015-09-24 14:11 蒲蜡 阅读(3293) 评论(1) 推荐(2) 编辑
摘要: C++操作xml没有标准库的支持,TinyXml是个不错的xml操作库,以前总是使用TinyXml读写xml,但是最近对大量xml进行读写时,速度真的是有点慢,特别是在调试时,每次启动读xml就要好长时间,由于TinyXml在加载文件后,所有的节点都是重新分配内存,然后操作完clear后,所有内存都会被释放,因此性能的瓶颈都在加载文件的时候,后来在网上看到有人说tinyxml2,虽下载下来尝试了下,那速度真的是提高了好几倍.看了看tinyxml2它里面实现了一个简单的内存池,当我们进行加载文件和clear操作时,都是在内存池上进行操作,减少了向系统申请和释放内存的时间,速度瞬间提高了好多.看看 阅读全文
posted @ 2013-10-29 19:35 蒲蜡 阅读(2412) 评论(0) 推荐(0) 编辑
摘要: TCP协议是TCP/IP参考模型中属于传输层协议,TCP是保证可靠地,有序的.TCP提供了多种机制保证这种服务,这里介绍下TCP建立连接和关闭连接的过程.TCP建立连接三次握手:服 SYN, client_seq 客务 户(第二次握手)器 端[服务器发送SYN,ACK包后处于SYN_RCVD状态]服 ACK, server_seq+1 客务 户(第二次握手)器 端[服务器发送FIN, ACK包后处于CLOSE_WAIT状态, 客户端收到FIN, ACK包后处于FI... 阅读全文
posted @ 2013-10-18 13:49 蒲蜡 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 大端(Big-Endian)小端(Little-Endian)不同的CPU将数据存储在内存中顺序不同造成的,大端:数据高位存储在内存地址的低位, 数据的低位存储在内存地址的高位.我们假设内存从0x4000开始存放一个16位的数0x1234以下是大端和小端,大端情况:0x40000x40011234小端情况:0x40000x40013412可以通过下面函数判断大端和小端:bool Big_Endian(){ union Endian { long l ; char c[ sizeof(long )]; }e ; e.l = 1; return (e.c[ sizeof(long) - 1] == 阅读全文
posted @ 2013-10-17 13:53 蒲蜡 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 协程(coroutine)是一种程序组件,一个轻量级的线程.在单核CPU中系统会将CPU划分为时间片,调度不同线程进行运行,给用户造成所有程序在同时运行的错觉;在多核CPU中每个线程可能由不同的CPU来执行.但是协程单核CPU和多核CPU中都和单核CPU中线程一样.协程在状态机,角色模型,迭代器,产生器非常实用.在网上看了好多协程的介绍和例子,总结下.协程实现的语言不是很多,lua是其中之一1)lua中操作协程的函数:coroutine.create() --创建一个协程coroutine.yield() --挂起一个协程coroutine.resume() --唤醒一个协程lua中协程中通过 阅读全文
posted @ 2013-10-13 22:36 蒲蜡 阅读(3493) 评论(0) 推荐(1) 编辑
摘要: boost中any库相对variant简单,any可以不限定类型,variant中对我们事先会定义好我们所需的类型,但是any无此限制,any的类型检测是在run time时.boost::anyt;t= 4;std::cout(t) (t) (operand);returntrue; }catch(constboost::bad_any_cast&) {returnfalse; }}boolis_string(constboost::any&operand){/*判定返回指针是否为空*/returnboost::any_cast(&operand);}同样any可以作 阅读全文
posted @ 2013-10-10 21:29 蒲蜡 阅读(863) 评论(0) 推荐(0) 编辑
摘要: boost的variant库类似于联合体,但是联合体中只能接受POD类型,但variant中并无此限制,它可以接受任意的类型.boost::variantu;u= 4;inti=boost::get(u);std::cout(u);std::cout(u);std::cout&u){if(int*pi=boost::get(&u)) {std::cout(&u)) {std::cout(&u)) {std::cout{public:voidoperator()(inti)const {std::coutu;printer_visitorvisitor;u= 4; 阅读全文
posted @ 2013-10-10 20:25 蒲蜡 阅读(8298) 评论(0) 推荐(1) 编辑
摘要: STL中仿函数是重要的组成部分.所谓的仿函数就是通过重载括号运算符实现的, 如下:STL库中都是泛型仿函数如小于操作:STL中定义了许多有用的操作,如less(小于),less_equal(小于等于),greater(大于),greater_equal(大于)等.我们主要看几个函数适配器.1)bind1st程序:输出:bind1st可以将两个参数函数转换成一个参数函数, 是一个简单的委托,上例中bind1st绑定仿函数less()左边的参数, replace_if调用bind1st仿函数时传入less()右边参数,由bind1st将两个参数传入less()中进行实际调用返回结果.2)bind2 阅读全文
posted @ 2013-10-07 21:20 蒲蜡 阅读(355) 评论(0) 推荐(0) 编辑