今年我们组计划写一本nginx模块开发以及原理解析方面的书,整本书是以open book的形式在网上会定时的更新,网址为http://tengine.taobao.org/book/index.html。本书分析的nginx源码版本为1.2.0,环境为linux,事件处理模型为epoll,大部分分析...
分类:
其他好文 时间:
2014-12-21 22:06:58
阅读次数:
193
对于nio这块估计在几年前就有关注,知道非阻塞,线程池,缓冲池,io的模式select,poll,epoll,甚至epoll中的et,lt.但是最近才有时间实际看了看netty的源码,才发现原来selector可以这么用,在我的印象中觉得一个服务其实一个selector就够用了,并且本身对...
分类:
其他好文 时间:
2014-12-19 11:59:26
阅读次数:
164
针对IO,总是涉及到阻塞、非阻塞、异步、同步以及select/poll和epoll的一些描述,那么这些东西到底是什么,有什么差异?
一般来讲一个IO分为两个阶段:
等待数据到达把数据从内核空间拷贝到用户空间
现在假设一个进程/线程A,试图进行一次IO操作。
A发出IO请求,两种情况:
1)立即返回
2)由于数据未准备好,需要等待,让出CPU给别的线程,自己s...
分类:
其他好文 时间:
2014-12-18 16:57:48
阅读次数:
573
引言: 相比于select,Epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024 表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这...
分类:
系统相关 时间:
2014-12-14 12:00:20
阅读次数:
412
参考原文:再谈select, iocp, epoll,kqueue及各种I/O复用机制一、I/O模型概述 介绍几种常见的I/O模型及其区别,如下:blocking I/Ononblocking I/OI/O multiplexing (selectandpoll)signal driven I...
分类:
其他好文 时间:
2014-12-12 19:01:00
阅读次数:
114
SquirrelMQ是一个快速的消息队列。SquirrelMQ特性:1. SquirrelMQ使用Slab内存分配算法来降低内存碎片,使用epoll来解决高并发问题。效率比redis要高,使用简单。2. 另外SquirrelMQ支持持久化,在down机的情况下也不用担心数据丢失。3. Squirre...
分类:
其他好文 时间:
2014-12-09 19:23:12
阅读次数:
346
Linux下高性能的网络库中大多使用的Reactor 模式去实现,Boost Asio在Linux下用epoll和select去模拟proactor模式,影响了它的效率和实现复杂度, 看陈硕的自己的Linux下Reactor网络库和ASIO的性能对比,大概比asio性能...
分类:
其他好文 时间:
2014-12-08 14:02:46
阅读次数:
207
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法一、问题引出 联系区别问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种:1...
分类:
其他好文 时间:
2014-12-07 23:03:26
阅读次数:
259
epoll与select/poll的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的操作。
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时...
分类:
系统相关 时间:
2014-12-06 14:07:16
阅读次数:
326
在读redis源代码的过程中,我一直在考虑一个问题,就是“为什么单线程的redis能做到如此高效?”。为了弄清楚这个问题,我查阅了一些资料,大概搞清楚了epoll等I/O模型的发展及其原理,以下是一个记录整理。##I/O模型###操作系统与网络I/O上图来自维基百科,是一个基本的计算机..
分类:
其他好文 时间:
2014-12-04 18:15:00
阅读次数:
293