apue学习第二十四天——高级I/O、生产者消费者问题、socket(提纲)

马上要过年了,祝愿所有人羊年大吉!


ok,其实剩下这三部分也写不完了,下面列一个提纲,以后再补:

1. 高级I/O

主要讲述非阻塞I/O,记录锁,I/O multiplexing(多路转接)和异步 I/O,memory map;

UNPv1中提到了5种I/O处理模型:

  • 阻塞I/O;
  • 非阻塞I/O也就是不阻塞,直接返回,或是成功,或是错误;
  • I/O多路转接,是构建一张描述符表,用select或poll函数等待我们感兴趣的描述符,看是否准备好,准备好就返回用于I/O;
  • signal driven I/O(信号驱动I/O),非阻塞,数据准备好时发信号,程序再去处理;
  • 异步I/O,非阻塞,与信号驱动I/O不同的是,I/O完成时通知进程;
2. 生产者消费者问题
这部分应该接上一篇,取自UNPv2,分五种 难度 递增的情况:
  • 多个线程完成生产后单个线程消费;
  • 同上,但不是所有线程完成生产后才消费,是随时消费;
  • 一个生产者、一个消费者的情况,但是变成了环缓冲区;
  • 环缓冲区,多个生产者,单个消费者;
  • 环缓冲区,多个生产者,多个消费者;
3. 网络IPC:socket
理解前提:
  • “everything is a file”,也就是文件的open --> read/write --> close;
  • 网络层的<ip address>实现点到点的连接,传输层的<协议,端口>可以实现端到端,每个要通信的进程绑定一个通信端口。
所以socket通信如下图:
apue学习第二十四天——高级I/O、生产者消费者问题、socket(提纲)_第1张图片
对一个服务器来说,前面几步是:
1. fd = socket(...);
2. bind(fd, ...);
3. listen(fd, ...);
4. ...

好了,其实《UNIX环境高级编程》内容很成体系。下一篇先写一下这一个多月来的学习总结。


你可能感兴趣的:(apue学习第二十四天——高级I/O、生产者消费者问题、socket(提纲))