青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

07 2016 档案

摘要:template <typename T> struct singleton_default { private: struct object_creator { object_creator() { singleton_default<T>::instance(); } inline void d 阅读全文
posted @ 2016-07-27 17:34 Leo.Z 阅读(1217) 评论(0) 推荐(1)
摘要:性能的目标 跑得更快吗?是用更少的资源跑得更快。如果不能兼得,我们通常选择跑得更快,这也是大多数时候性能优化的目的,也有些时候性能优化是为了减少资源消耗。 系统性能的定义 1.吞吐量,系统每s能处理的请求数、任务数 2.时延,系统处理一个请求或者任务的耗时 3.并发数,次级指标,同时接入的客户端数量 阅读全文
posted @ 2016-07-22 15:04 Leo.Z 阅读(464) 评论(1) 推荐(1)
摘要:内存池技术是一种饱受争议的技术 争议热点在于到底有没有必要自己实现。 1.内存池技术出现在libc尚不成熟的时候,当时程序经常在运行一段时间后性能下降,当时维护内存池很有必要 2.现在64位服务器经常是32G以上的内存,管理内存碎片意义不打 3.写malloc的各位都是大神,自己写有99%的可能会更 阅读全文
posted @ 2016-07-19 14:26 Leo.Z 阅读(347) 评论(0) 推荐(1)
摘要:记录最新的N条执行时间超过M毫秒的命令。慢查询日志保存在内存中,而不是文件中,这保证了慢查询日志的效率。慢查询日志的条目定义/* This structure defines an entry inside the slow log list *//* * 慢查询日志 */typedef struc 阅读全文
posted @ 2016-07-12 17:10 Leo.Z 阅读(957) 评论(0) 推荐(0)
摘要:跳跃表是一种插入、查询、删除的平均时间复杂度为O(nlogn)的数据结构,在最差情况下是O(n),当然这几乎很难出现。 和红黑树相比较 最差时间复杂度要差很多,红黑树是O(nlogn),而跳跃表是O(n) 平均时间复杂度是一样的 实现要简单很多 https://en.wikipedia.org/wi 阅读全文
posted @ 2016-07-12 16:08 Leo.Z 阅读(3965) 评论(0) 推荐(0)
摘要:BIO即background I/O service,后台I/O服务,是redis的aof持久化后台服务。 redis把阻塞的同步I/O操作交给后台I/O服务来完成:close和fsync。 close加入BIO的原因 1.如果fd是特定文件描述符的最后一份拷贝,那么文件描述符相关的资源会被释放。 阅读全文
posted @ 2016-07-12 10:19 Leo.Z 阅读(1882) 评论(0) 推荐(0)
摘要:1.调用alarm,在调用超过指定时间时产生SIGALARM信号,这涉及到信号处理,而且可能和进程中其他的alarm冲突 2.使用select阻塞在等待I/O上,select内部有时间限制,一次代替在read和write上阻塞超时 3.使用新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项 阅读全文
posted @ 2016-07-11 21:05 Leo.Z 阅读(250) 评论(0) 推荐(0)
摘要:设置和影响套接口选项的方法有 1.getsockopt和setsockopt 2.fcntl 3.ioctl getsockopt和setsockopt 这两个方法仅适用于套接字 有两种基本类型的套接口选项:打开或关闭某个特性的二进制标志,取得并返回我们可以设置或检验的特定值的选项,标有标志的列指明 阅读全文
posted @ 2016-07-11 17:09 Leo.Z 阅读(1014) 评论(0) 推荐(0)
摘要:典型应用于以下场合 1.处理多个描述字时,比如同时处理套接字和磁盘IO、终端IO 2.一个客户同时处理多个套接字 3.服务器既要处理监听套接字,又要处理已连接套接字 4.既要处理TCP、也要处理UDP 5.一个服务器要处理多个服务和协议 I/O多路复用不局限于网络编程,也可以用于其他程序。 UNIX 阅读全文
posted @ 2016-07-10 23:10 Leo.Z 阅读(388) 评论(0) 推荐(0)
摘要:网络编程不只是编写网络、主机、进程都正常时能良好工作的进程,更重要的是客户主机崩溃、客户进程崩溃网络异常时怎么处理。 accept被信号中断 accept以及套接字上的I/O可能被信号打断,并返回EINTR作为结果,必须处理该返回值并且适当时候再次调用。 for(;;) { if(connfd = 阅读全文
posted @ 2016-07-08 16:26 Leo.Z 阅读(1158) 评论(0) 推荐(0)
摘要:linux的信号来源 1.由一个进程发给另一个进程(或本身) 2.内核发给进程 信号的特征 异步的,分为可靠信号和不可靠信号。 进程收到信号时怎么处理1.执行信号处理程序2.如果收到信号时处在一个阻塞函数中,中断当前系统调用并执行信号处理程序3.如果想要信号处理程序后恢复被中断的系统调用,需要设置S 阅读全文
posted @ 2016-07-08 11:36 Leo.Z 阅读(214) 评论(0) 推荐(0)
摘要:PDU 协议数据单元,有隐藏size上限,如果应用程序的包超过指定上限会被划分为多个PDU发送 TCP不提供记录结束标记,需要应用程序自己提供,比如http的\r\n 编写TCP协议需要注意IPV4和IPV6的兼容性,可以在应用程序中实现协议无关性。 getaddrinfo getaddrinfo 阅读全文
posted @ 2016-07-08 09:34 Leo.Z 阅读(199) 评论(0) 推荐(0)
摘要:基础要素 任务/数据划分 多个控制流并行,划分带来的负载均衡和通信开销也对程序的性能有决定性的作用 并发访问控制 多个控制流需要访问不同或者相同的资源,如何协调这些资源变得非常重要 并行化和面向对象 并行需要去除数据和控制的依赖关系,而面向对象把大问题解决成小问题,然后通过对象之间的通信来解决小问题 阅读全文
posted @ 2016-07-07 15:00 Leo.Z 阅读(327) 评论(0) 推荐(0)
摘要:概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer { /* Pubsub */ // 字典,键为频道,值为链表 // 链表中保存了所有订阅某个频道的客户端 // 新客户端总是被添加到链表的表尾 dict *pubsub 阅读全文
posted @ 2016-07-03 11:22 Leo.Z 阅读(440) 评论(0) 推荐(0)
摘要:前言 C10K problem提出了一个问题,如果1w个客户端连接到server上,间歇性的发送消息,有哪些好的方案? 其中的一种方案是,每个线程处理多个客户端,使用异步I/O和就绪通知机制,redis无疑是一个很好的榜样 redis的特点和C10K proble的契合点 内存数据库; 单线程支持上 阅读全文
posted @ 2016-07-03 01:37 Leo.Z 阅读(1060) 评论(0) 推荐(0)
摘要:引言 C10K problem提到一种zero-copy的技术,可以提高网络的吞吐量,分布式消息队列kafka中在消费者消费消息的时候根据offset进行zero-copy。linux下的zero-copy通过sendfile API实现。 什么是zero-copy zero-copy在概念上是值操 阅读全文
posted @ 2016-07-03 00:33 Leo.Z 阅读(262) 评论(0) 推荐(0)
摘要:什么是C10K问题 I/O策略 软件架构 1.单线程解决多重I/O调用 不要使用阻塞/同步的调用,如果非要这么做,那就采用多进程或者多线程来并发处理。 使用非阻塞的调用和就绪通知策略,当下一个I/O可用时通知调用者。适用于套接字I/O,而不是磁盘I/O. 使用异步的调用和通知策略,当下一个I/O可用 阅读全文
posted @ 2016-07-03 00:06 Leo.Z 阅读(286) 评论(0) 推荐(0)
摘要:reactor介绍 reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。 Reactor的优点和应用 Reactor最常用于非阻塞的socket 传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干, 阅读全文
posted @ 2016-07-03 00:05 Leo.Z 阅读(1972) 评论(0) 推荐(0)
摘要:libev是一个开源库,实现了一个reactor模式事件驱动任务调度库。代码非常精简,包含所有实现的.c文件只有不到5000行。 支持的事件类型: ev_io ev_timer ev_periodic ev_signal ev_child ev_stat ev_idle ev_prepare and 阅读全文
posted @ 2016-07-03 00:04 Leo.Z 阅读(466) 评论(0) 推荐(0)