术语
阻塞:发出一个请求不能立刻返回响应,要等所有的逻辑全处理完才能返回响应(不可能无限等待则出现超时问题)
非阻塞:发出一个请求立刻返回应答,不用等处理完所有逻辑(如何得到结果:状态(轮询)、通知、回调)
同步
协同步调,按预定的先后次序进行运行。注:不要理解为同时进行,而应指协同、协助、互相配合 是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
异步
彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作
互斥
指对于共享的进程系统资源,在各单个线程访问时的排它性。线程互斥可看成特殊的线程同步 是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的
同步和异步的区别:请求发出后,是否需要等待结果,才能继续执行其他操作。
同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。
同步阻塞:主动等待完成通知且不做其他任务
同步非阻塞:主动等待完成通知,可做其他任务但需任务切换
异步阻塞:完成后被动告知但不做其他任务
异步非阻塞:完成后被动告知(仅告知状态),继续做其他任务
同步:主动关注完成标识
异步:被动告知完成
并行&串行&并发
可重入&不可重入函数
单工&双工
实现服务器,需要满足什么
高可用
高并发
高拓展
网络模型
发展历程
单进程模型
多进程模型
多线程模型
多进程多线程模型
Reactor网络模型与Pereactor网络模型
Socket编程
socket综合了IP、TCP即传输层和网络层的系统调用接口
socket
bind
listen
accept
connect
read/write
sendto/recvfrom
close
与TCP三次握手联系起来
socket位于OSI模型哪一层
sock地址
sockaddr 基础核心,所有api中的地址均围绕它展开
sockaddr_in
sockaddr_in6
sockaddr_storage: IPv4和IPv6
工具
获取端口号
获取IP地址(二进制、点分十进制字符串,如何转换)
获取对端地址、本地地址
获取域名
字节序
大端字节序:网络字节序
小端字节序:主机字节序
Redis中用的是小端字节序
如何检验
IO多路复用
select
api
select
poll
与select类似
api
poll
epoll
将捕获就绪事件与?两步分开了
api
epoll_create
epoll_wait
epoll_ctl
ET和LT模式
代码实现
三者有什么联系和区别
多进程
fork
exec
api
进程间通信
管道(无名、有名管道)
无名管道:单工,需要创建2个管道实现相互通信
api
pipe =
进程间有关系:父子进程或兄弟进程
有名管道:双工
版本支持?
sockpair
信号量
消息队列
socket——不同主机间的进程
进程间互斥同步
多线程
posix:
api
线程间通信(同步)
锁
互斥量
mutex
条件变量
cond
网络事件
实际上就两类:读和写事件,只是作用于不同的文件描述符,如socket、管道、文件
IO事件(读写)
定时事件(定时器)
连接事件(读事件)
信号事件