第7章 阻塞式非阻塞式.ppt

第7章 阻塞式非阻塞式

第7章 阻塞式/非阻塞式I/O 7.1 I/O 模 型 7.2 阻塞函数的编程 7.3 非阻塞函数的编程 7.4 信号驱动I/O 7.1 I/O模型 多路复用I/O:综合了阻塞式和非阻塞式模型的优点。该模型使用select()函数同时检查多个套接字描述符是否就绪。当有一个或一个以上描述符读/写就绪时,函数select()成功返回。多路复用是最为理想的编程方式,兼有前两种模型的长处。其思想是在进行读写操作之前检查操作的可行性,这样进行读写操作将不会阻塞。该方式的缺点是:存在多个Socket时编程比较复杂,如果只有一个Socket则效率较低,而且select()调用可能阻塞。 信号驱动I/O:利用了内核的信号机制。当套接字描述符可以进行读写操作时,内核用信号SIGIO通知进程。该方式的主要缺点是:信号处理函数的编写增加了编程的难度;面向字符流的下CP连接不适合使用信号驱动模型,因为每个字符的到达或发送都可能引发SIGIO信号,而且程序很难以区分读、写两种信号。 7.1.1 产生阻塞的原因 产生阻塞的原因是操作系统的进程结构和进程调度方式。在Linux系统中,一个进程对应于系统进程向量表里某个指针所指的一个task_struct结构。这个结构表明了进程的运行状态、进程占用CPU的时间、计时器的数值等信息,其中运行状态包括以下几种: (1) 运行态:进程正在运行,

文档评论(0)

1亿VIP精品文档

相关文档