您的位置:首页 > 理论基础 > 计算机网络

Unix网络编程 5、6章笔记

2016-05-22 15:31 309 查看

第五章

5.1 wait以及waitpid

include

pid_t wait(int* statloc);
pid_t waitpid(pid_t pid, int* statloc, int options);

//若成功则返回进程ID,若失败则返回0或-1

函数wait以及waitpid均返回2个值,已经终止的子进程的进程ID号,以及通过statloc指针返回的子进程终止状态(一个整数)。
wait函数:
如果调用wait的进程没有已终止的子进程,不过有一个或多个子进程仍在执行,wait将阻塞到现有子进程第一个终止为止。
waitpid函数:
pid参数允许指定想等待的子进程的进程ID,值-1表示等待第一个终止的子进程。options参数允许我们指定的附加选项,最常用的是WNOHANG,若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若结束,则返回该子进程的ID,这样如果pid进程还在执行,则内核不会阻塞。使用while来轮询可以保证等待所有子进程都结束,不会产生僵尸进程。

第六章

6.1 概述

IO多路复用的描述转载自:http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html
IO多路复用:内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:

  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。

  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。

  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。

  (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。

  (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。

  与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

6.2 I/O模型

类型:
阻塞式I/O
非阻塞式I/O
I/O复用(select和poll)
信号驱动式I/O(SIGIO)
异步I/O(POSIX的aio_系列函数)

6.2.1阻塞式I/O模型

默认情形下,所有套接字都是阻塞的,以数据报套接字为例(UDP):



6.2.2 非阻塞式I/O模型

进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误。



该形式称为轮询,应用程序持续轮询内核,以查看某个操作符是否就绪,这样往往耗费大量CPU时间。如上图,前三次调用recvfrom时没有数据可以返回,因此内核返回一个EWOULDBLOCK错误,第四次调用时有一个数据报准备好了,它被复制到应用进程缓冲区,所以recvfrom成功返回。

6.2.3 I/O复用模型

可以通过调用select或者poll,阻塞在这两个系统调用中的某一个上,而不是阻塞在真正的I/O系统调用上



6.2.4 信号驱动式I/O模型

使用信号,让内核在描述符就绪时发送SIGIO信号通知我们。



6.2.5 异步I/O模型

告知内核启动某个操作,并让内核在整个操作(包括数据从内核复制到我们自己的缓冲区)完成后通知我们。



6.3 select函数

该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它。
调用select的例子,告知内核仅在下列情况下返回:
集合{1,4,5}中的任意一个描述符准备好读;
集合{2,7}中的任何描述符准备好写;
集合{1,4}中的任何描述符有异常条件待处理;
已经历了10.2秒
通过调用select告知内核对哪些描述符(读、写或异常条件)感兴趣以及等待多长时间。
select函数的原型如下:

#include
#include

int select(int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *execptset, const struct timeval *timeout);
//若有就绪描述符则返回其数量,若超时则返回0,若出错则返回-1

struct timeval{
long tv_sec;    //seconds
long tv_usec;   //microseconds
};


maxfdp1的值是最大描述符个数+1,因为描述符从0开始到maxfdp1-1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: