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.htmlIO多路复用:内核一旦发现进程指定的一个或者多个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
相关文章推荐
- MATLAB 神经网络基础(4)
- win10下使用Fiddler进行网络抓包
- 解决httpclient抛出URISyntaxException异常
- gitlab开启https加密 and 全站https 推荐
- http以及https请求的连接过程
- 按网络情况 下载图片
- MATLAB 神经网络基础(3)
- gson解析通过okhttp获取的json格式数据
- VMware Workstation虚拟机中网络设置
- HttpServletResponse与HttpServletRequest理解
- HTML---网络编程(2)
- TCP/IP详解(五)---IP选路
- HTTP请求报文和HTTP响应报文
- 端口号
- 《善圈第15期沙龙》善圈沙龙,乐趣无穷!
- CentOS 6 安装,配置 httpd-2.4详解
- [从头学python] 第08节 http以及urllib的盘点
- 初步理解TCP/IP网络
- Android中HttpURLConnection使用详解
- 使用 libevent 和 libev 提高网络应用性能