对于select和poll,其主要原理跟epoll不同poll和select的共同点就是,对全部指定设备(fd)都做一次poll,当然这往往都是还没有就绪的,那就会通过回调函数把当前进程注册到设备的等待队列,如果所有设备返回的掩码都没有显示任何的事件触发,就去回调函数的函数指针,进入有限时的睡眠状态...
分类:
其他好文 时间:
2015-04-19 22:43:02
阅读次数:
138
联系区别
问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种:
1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销。(Apache服务器是用的子进程的方式,优点可以隔离用户)
2.用一个进程,但是使用非...
分类:
其他好文 时间:
2015-04-19 17:59:49
阅读次数:
100
Mac上安装memcached类似于在Linux平台上安装memcached。主要需要做两块:一.安装libevent库;二.安装memcached;一.安装libevent库libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。即使...
分类:
系统相关 时间:
2015-04-19 10:03:46
阅读次数:
311
服务器端:
#-*- coding:utf8 -*-
import socket
import select
import os
address = "0.0.0.0"
port = 10001
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def main():
global address,port,sock...
分类:
编程语言 时间:
2015-04-16 14:24:09
阅读次数:
151
Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的。下面通过比较Apache和Nginx工作原理来比较。 传统Apache都是多进程或者多线程来工作,假设是多进程工作(prefork),apache会先生成几个进程,类似进程池的....
分类:
Web程序 时间:
2015-04-13 20:44:40
阅读次数:
180
学习bind9源码之前,首先要知道如何用gdb来调试bind。BIND9的源码我是先看代码弄懂它的架构,像什么event-drive,epoll等,再去看它的业务流程。看业务流程的时候要追踪它的数据流和处理过程,所以用gdb比较好,当然自己加日志再结合BIND9自有的日志也不是不行,只是觉得这样.....
分类:
数据库 时间:
2015-04-13 14:13:58
阅读次数:
218
epoll极简介绍
epoll_create 创建一个epoll内核对象,返回指向该对象的fd
epoll_ctl 往epoll中添加、删除、修改需要监控的套接字
epoll_wait 等待epoll中的套接字产生可读、可写、异常消息...
分类:
其他好文 时间:
2015-04-09 23:55:44
阅读次数:
361
本文将讨论网络编程中的高级I/O复用技术,将从下面几个方面进行展开:
a. 什么是复用技术呢?
b. 什么情况下需要使用复用技术呢?
c. I/O的复用技术的工作原理是什么?
d. select, poll and epoll的实现机制,以及他们之间的区别。...
分类:
其他好文 时间:
2015-04-06 21:54:39
阅读次数:
239
关于select与epoll的区别,网上的文章已是一大堆。不过别人的终究是别人的,总得自己去理解才更深刻。于是在阅读了大量的文章后,再装模作样的看下源码,写下了自己的一些理解。 在开始之前,要明白linux中分用户空间、内核空间,这相当于两块不能直接相互访问的内存。而用户程序要访问设备,包括网...
分类:
其他好文 时间:
2015-04-04 19:48:37
阅读次数:
351