- 网络编程关注的问题
- 网络io职责
- 操作io
-
读写缓冲区
- 再次回顾用户空间和内核空间,并回忆中级调度
- // 默认情况下,fd 是阻塞的,设置非阻塞的方法如下;
int flag = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flag | O_NONBLOCK);
- 检测io
- reactor
- io多路复用
- 非阻塞 io
- reactor 是异步事件吗?
- reactor为什么搭非阻塞io? (由三方面讨论)
- 多线程环境
- 将一个listenfd放到多个epoll去处理
- 边缘触发下
- 读事件触发时,read在一次事件循环中把read buffer读空
- select bug
1:01:00- man select
- 是不是i0多路复用一定要搭配非阻塞0?
- redis
- 环境
- key-value
- 多种 数据结构
- 内存数据库
- 命令处理是单线程的。
- 为什么? 1:21:20
- 并不是整体是单线程,
- 为什么要使用 单reactor
- redis 怎么处理的 reactor
- redis 针对 reactor 做了哪些优化
- memcached
- nginx
- 同步IO
-
操作IO
- 连接的建立
- connct
listen(fd,backlog)
这之中的 第二个参数 影响的 待处理 链接 请求数 ,是在哪里的连接请求数?(全连接队列 在哪里?
)- accept 函数的 作用:
- 操作什么?
- 检测什么?
- 连接的断开
- 主动
- close
- 关闭双方
- 清理资源
- shutdown
- 关闭单方面
- 被动
- read = 0;读端关闭
- write = -1 && errno = EPIPE;写端关闭 (EPIPE 代表写端关闭,这个在哪里说明/定义 的?)
- 引出服务器的半关闭状态。 联系上文的shutdown 分析。
- 连接到达
- read
- 操作什么?
- 检测什么?
- 消息发送
- write
- 操作什么?
- 检测什么?
-
检测IO
- 链接建立时候,主动连接时,怎么监听写事件? 谁来监听? 谁来写? 写什么饿?给谁写?
- IO多路复用时,是怎么检测的?过程是怎么样的? 怎么和握手流程结合?
-
epoll 38:00
- 是一种系统调用方式,实现的是IO 多路复用
- epoll IO多路复用,是没有阻塞、非阻塞之说。
- 如何证明: epoll_wait()函数, 最后一个参数 timeOut 的填值,-1 时阻塞, 44:00
- 由 connect 这个 IO函数,的检测 方式, 扩展 epoll 、select、poll 的检测方式这两种大类型的不同?
- errnumber
- 检测详细的事件,检测模糊的事件。
惊群:
边缘触发:
水平触发:
服务器高级架构体系:https://ke.qq.com/course/417774?flowToken=1010783