非阻塞式的 I/O 是进程调用 I/O 操作时,若数据未准备就绪,则立即返回一个 EWOULDBLOCK 错误,在数据准备就绪之前,应用进程采用轮询的方式检查数据是否准备就绪。直到数据准备就绪,则内核把该数据复制到应用进程的缓冲区,完成数据复制之前进程处于阻塞状态,直到数据复制完成后才返回。即 I/O 操作第一阶段处于轮询检查状态,第二阶段处于阻塞状态。...
分类:
其他好文 时间:
2014-12-17 09:07:32
阅读次数:
251
POSIX中对同步IO和异步IO的规定:同步IO操作:引起进程的阻塞直到IO操作完成,异步IO操作:IO操作不会引起进程阻塞在UNIX下,有5中操作模型:阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO按照网络上的说法,前四种是属于同步IO,第五种才属于异步IO,对于这个结论,我的理解是根据....
分类:
其他好文 时间:
2014-12-16 09:58:36
阅读次数:
199
Node.js是单线程的,基于事件循环,非阻塞 IO的。事件循环中使用一个事件队列,在每个时间点上,系统只会处理一个事件,即使电脑有多个CPU核心,也无法同时并行的处理多个事件。因此,node.js适合处理I/O型的应用,不适合那种CPU运算密集型的应用。在I/O型的应用中,给每一个输入输出定义一个...
分类:
Web程序 时间:
2014-12-15 15:25:48
阅读次数:
237
在分析 I/O 模型之前,首先了解 同步 I/O 和 异步 I/O 的基本概念:
同步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程会被挂起(即阻塞),直到 I/O 操作完成后返回;
异步 I/O:进程调用 I/O 操作函数时,在 I/O 操作函数返回之前,该进程不会被挂起(即不阻塞),当 I/O 操作完成后会通知方式告知进程;
在 Unix 系统中主要有 5 种 I/O 模型:阻塞式 I/O;非阻塞式 I/O;I/O 多路复用;信号驱动式 I/O;异步 I/O;
一般一个输入...
分类:
其他好文 时间:
2014-12-13 13:31:12
阅读次数:
188
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N...
分类:
其他好文 时间:
2014-11-15 00:11:49
阅读次数:
301
本文无太多内容,主要是几个前面提到过的注意点: 一是epoll的fd需要重新装填。我们将tcp_connection_t的指针保存在数组中,所以我们以这个数组为依据,重新装填fd的监听事件。 //重新装填epoll内fd的监听事件 int i; for(i = 0; i buffer_)) even...
分类:
系统相关 时间:
2014-10-27 21:15:38
阅读次数:
295
关于poll模型监听的事件以及返回事件,我们定义宏如下: #define kReadEvent (POLLIN | POLLPRI)
#define kWriteEvent (POLLOUT | POLLWRBAND)
#define kReadREvent (POLLIN | POLLPRI | ...
分类:
系统相关 时间:
2014-10-27 21:13:50
阅读次数:
352
使用poll与epoll的区别主要在于: poll可以每次重新装填fd数组,但是epoll的fd是一开始就加入了,不可能每次都重新加入 于是采用这种策略: epoll除了listenfd一开始就监听read事件,其他的客户fd加入epoll时,监听的事件都为空。 然后在每次epoll_wait之前,...
分类:
系统相关 时间:
2014-10-27 21:09:42
阅读次数:
197
前面几节我们讨论了非阻塞IO的基本概念、Buffer的设计以及非阻塞connect的实现,现在我们使用它们来完成客户端的编写。 我们在http://www.cnblogs.com/inevermore/p/4049165.html中提出过,客户端需要监听stdin、stdout和sockfd。 这里...
分类:
系统相关 时间:
2014-10-24 22:10:27
阅读次数:
388
我们为客户端的编写再做一些工作。 这次我们使用非阻塞IO实现connect函数。 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 在阻塞IO中,调用connect后一般会阻塞,直到确定连接成功或者失败。...
分类:
系统相关 时间:
2014-10-24 20:45:50
阅读次数:
290