马上要过年了,祝愿所有人羊年大吉!
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通信如下图:
对一个服务器来说,前面几步是:
1. fd = socket(...);
2. bind(fd, ...);
3. listen(fd, ...);
4. ...
好了,其实《UNIX环境高级编程》内容很成体系。下一篇先写一下这一个多月来的学习总结。
本文概要介绍了信息技术领域的关键概念与技术,包括I/O处理、生产者消费者问题、网络IPC等,并分享了作者一个多月的学习心得。具体内容涉及高级I/O、多种I/O处理模型、生产者消费者问题的不同场景、socket通信原理及应用,以及学习过程中的个人总结。
2万+

被折叠的 条评论
为什么被折叠?



