iNode介绍
cron
死锁
死锁必须同时满足4个条件(破坏任意一个即可):
- 互斥使用:资源被一个任务使用时,别的任务不能使用(一般不破坏这个条件)
- 不可抢占:请求者不能强制从占有者手中夺取资源(任务拿到资源1时却拿不到资源2就主动释放所有已占有的资源)
- 占有且等待:请求其他资源的同时保持对原有资源的占有(每个任务一次申请所有的资源,失败就阻塞等待)
- 循环等待:任务一等待任务二释放资源,二又等一释放(给所有资源设定序号,每个任务都从需要小的资源开始申请)
线程/协程/异步的编程模型
IO多路复用select/poll/epoll介绍
select:使用文件描述符
- 1024 bitmap
- FD_SET设置好的bitmap不可重用
- bitmap从用户态拷贝到内核态的开销
- 发生事件select返回后,需要O(n)遍历全部bitmap才能知道发生了哪些事情
poll:使用struct pollfd{fd,events,revents}
- 内核使用链表存储,不止1024(events和revents时short有65535个bit)
- 关心事件bitmap(events)和发生事件(revents)分开,使得bitmap可重用
- 同select
- 同select
epoll:使用struct epoll_event{data.fd,events}
- 内核使用红黑树存储,但没有revents
- epoll_ctl添加关心事件到内核态(可重用)
- 第2步已经拷贝到内核态,一次拷贝,终生受用,降低开销(视频有误:实际没有使用共享内存)
- poll_wait直接把发生事件回填到参数内不需要再遍历判断
float是如何在计算机中存储的
信号
用户态与内核态
用户态 申请外部资源(系统调用,中断,异常)后会陷入到内核态