【第八周】性能优化(二)
文件与硬盘I/O
磁盘介质
机械硬盘
固态硬盘
数据存储结构
B+树
LSM树
文件控制块
RAID 队里磁盘冗余阵列
HDFS
数据结构与算法
算法衡量指标
时间复杂度
空间复杂度
数组
存储空间连续
数据类型一致
随机快速读写(追加写的写)
链表
存储空间可以不连续
存储内容包含下一个数据袁术的内存指针
Hash表
先hash再存入地址指针
栈
后进先出
线程调用栈
队列
先进先出
消息队列
树
二叉排序树
平衡二叉树
红黑树
跳表
常用算法
穷举
递归
贪心
动态规划
网络通信协议
网络通信历程
![](https://static001.geekbang.org/infoq/c6/c60f088b65cb5229c04d488c651bd38d.png)
OSI七层模型和TCP/IP四层模型
![](https://static001.geekbang.org/infoq/4a/4a47f5150d2eba643ee2ce8e5b4dc5c9.png)
网络数据包格式
![](https://static001.geekbang.org/infoq/f7/f72b8f91bac4b48847eb04941c795463.png)
http协议演进
1.0 每个请求响应都会建立TCP连接
1.1 允许客户端复用TCP连接, 但任意时间点上每个连接只能执行一次请求/响应交换
2.0 引入流的概念,允许不同的HTTP并发地复用到同一TCP连接上,但当多个HTTP请求复用一个TCP连接,如果前面的请求/响应没有处理完,后面的请求/响应也无法处理,也就是会出现队头堵塞现象。
3.0 不是使用 TCP 作为会话的传输层,而是使用 QUIC (一种新的互联网传输协议)。该协议在传输层将流作为一等公民引入。多个QUIC 流共享相同的 QUIC 连接,因此不需要额外的握手和慢启动来创建新的 QUIC 流。但 QUIC 流是独立的,因此在大多数情况下,只影响一个流的丢包不会影响其他流,这是因为 QUIC 数据包封装在 UDP数据包。
非阻塞网络I/O
非阻塞 I/O:I/O 操作立即返回,发起线程不会阻塞等待。
非阻塞 read 操作:
Socket 接收缓冲区有数据,读 n 个(不保证数据被读完整,因此有可能需要多次读)。
Socket 接收缓冲区没数据,则返回失败(不会等待)。
非阻塞write:
Socket 发送缓冲区满,返回失败(不会等待)。
Socket 发送缓冲区不满,写 n 个数据(不保证一次性全部写入,因此可能需要多次写)。
系统I/O复用方式
select
![](https://static001.geekbang.org/infoq/05/05568c23df5080a06f1d182f2fe894d5.png)
poll
![](https://static001.geekbang.org/infoq/ed/ed8b00643481735526511e327513cb18.png)
epoll
![](https://static001.geekbang.org/infoq/38/387de1869fb290c4130de30f7c3124f8.png)
评论