读面向模式的软件体系架构:卷2- 第一弹

一、 并发和网络化对象

1. 难题

服务间通信和服务配置

通信可以采用IPC, 通信协议, 中间件。
直接用底层C语言的API, 会增加偶发的复杂性。
安全性问题。
动态或静态的演化能力。

事件处理

开发人员要将精力集中在应用层功能, 而不是事件源和多路分解器。

并发

单线程的进程开发网络应用程序是机器困难的。
难题:
 确定并发架构, 减小语境交换、 同步、 数据复制和移动的开销。
 同步原语。
 消除不必要的锁。

同步

加锁或原子量。
锁没释放, GG。

2. 例子

(1) 框架

事件分配器
 没啥说的, 标配
协议处理器
  nginx下,每个协议有n个对应的事件处理流程, 看得恶心。 之后再仔细看看
虚拟文件系统
 这个之前没接触过, 要仔细看看

(2) 封装底层API

废话

(3) 协议处理中分离事件处理和连接管理

 注册这个词, 让我想起了asio的服务, 也是注册的, 勉强类似。
必然的, 任何涉及网卡读写的函数, 都要放到这里来。 三次握手也是很浪费时间的。
不仅如此, 涉及硬盘读写的函数, 更要放到这里来。

(4) 多线程提升性能

过度的章节

(5) 同步队列

此处线程换成进程, 更加高效。但是传递生产者生成的数据, 太耗费资源了。

(6) 最小化服务器线程的开销

忘记nginx怎么写了。 好像是竞争epoll的描述符, 然后监听。 不同工作进程, 此处资源交换的代价几乎忽略。
本书此处out了。

(7) 有效利用异步io

所以嘛, nginx的每个请求, 要经过七八个时间, 每当涉及io时, 就放入监听队列中。

(8) 服务器的可配置性

目前所有的服务器, 都是可配置的。且如何配置, 也是一门小小的学问。

(9) 其他模式

注:花了一下午时间, 边玩边看, 终于读完了第一章。和我之前看过的nginx源码, 好像是一个模子刻出来的。遗憾的是源码早就忘了n年了, 还有一点模糊的印象。 看完这本书后, 再去看源码, 相信肯定收获不小。

猜你喜欢

转载自blog.csdn.net/weixin_42238721/article/details/91512142