几个基础概念:
- TCP
- 可靠连接,如果客户端无响应会自动重试。
- UDP
- 不可靠连接,客户端无响应不会重试。
- Http
- 是一种基于TCP/IP协议的超文本传输协议,是应用层的协议,实现该协议建立的链接都属于短链接。
- Socket
- 是基于TCP/IP的一种调用接口。生成长链接。
画了一张网络传输流程图:
五种I/O模型:
Linux将数据从内核拷贝到用户内存,属于I/O操作,Linux提供了5种模式可以支持。
- 阻塞I/O
- 应用请求缓存内容,不存在就阻塞等待。不适用用于并发量大的应用,得为每个请求分配一个处理线程。
- 非阻塞I/O
- 应用请求缓存内容,不存在就返回error,然后不停重试。理论可以支持单线程轮询所有请求。轮询消耗CPU资源。
- I/O多路复用
- 多个I/O请求注册到一个Select复用器上。调用select时阻塞,并监听多个I/O,有可用数据时返回。类似于阻塞I/O,只不过只阻塞一个select,不是阻塞多个I/O。
- 信号驱动I/O
- 异步I/O
- 应层发起读数据时候注册回调函数,当数据写完,内核通知应用层读取。