网络编程
文章平均质量分 78
connyjiwa
这个作者很懒,什么都没留下…
展开
-
socket阻塞与非阻塞,同步与异步、I/O模型
socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一转载 2014-03-18 17:06:58 · 476 阅读 · 0 评论 -
epoll用法
以下内容整理自网络。 1、epoll的优点: (1)支持一个进程打开大数量的socket描述符(FD),这个数目和系统的内存有关,可以查看/proc/sys/fs/file-max来查看; (2)epoll只对活跃的socket进行操作,而不必轮询所有的描述符,因此IO效率不会随着FD的增加而线型下降; (3)epoll使用mmap使内核和用户空间共享同一块内存,可以加快内核与用户空间之间原创 2014-03-18 10:53:57 · 733 阅读 · 0 评论 -
一个epoll例子(一)
摘自网络的一个例子: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXBUF 1024 #defin转载 2014-03-25 09:22:00 · 516 阅读 · 0 评论 -
一个epoll例子(二)
/* 使用 epoll 写的回射服务器将从client中接收到的数据再返回给client */ #include #include #include #include #include #include #include #include #include #include #include using namespace std转载 2014-03-25 10:03:24 · 708 阅读 · 0 评论 -
epoll的LT模式和ET模式
man page:http://linux.die.net/man/4/epoll epoll事件分发系统可以运转在两种模式下:ET(边缘触发模式)和LT(水平触发模式)。 接下来说明这两种模式的不同之处,假设一个环境如下: 1、我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符 2、这个时候从管道的另一端被写入2K的数据 3、调用epoll_wait(),并且转载 2014-03-25 16:02:34 · 1050 阅读 · 0 评论 -
epoll学习:思考一种高性能的服务器处理框架
1、首先需要一个内存池,目的在于: ·减少频繁的分配和释放,提高性能的同时,还能避免内存碎片的问题; ·能够存储变长的数据,不要很傻瓜地只能预分配一个最大长度; ·基于SLAB算法实现内存池是一个好的思路:分配不同大小的多个块,请求时返回大于请求长度的最小块即可,对于容器而言,处理固定块的分配和回收,相当容易实现。当然,还要记得需要设计成线程安全的,自旋锁比较好,使用读写自旋锁就更好转载 2014-03-25 17:11:29 · 575 阅读 · 0 评论 -
多进程服务器中,epoll的创建应该在创建子进程之后
看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调 用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数 返回0, 而客户端似乎被阻塞了: 服务器端: #include转载 2014-03-25 17:25:22 · 683 阅读 · 0 评论 -
epoll学习笔记(ET模式下事件触发原理和数据收发存在的问题)
这篇文章所讲的例子和情况可以结合《epoll的LT模式和ET模式 》这篇看。 epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的 select/poll操作,只要还有没有处理的事件就会一直通知. 以代码来说明问题: 首先给转载 2014-03-25 17:34:38 · 1857 阅读 · 0 评论 -
man epoll上的几个问题
Q1 What happens if you add the same fd to an epoll_set twice? 如果你把相同的文件描述符添加到epoll中两次会发生什么?A1 You will probably get EEXIST. However, it is possible that two threads may add the same fd twice. This原创 2014-03-25 16:50:37 · 1505 阅读 · 0 评论