目录
描述的是cpu速度快,而外部IO速度慢,cpu不得不牺牲宝贵的时间等待外部IO,因此出现了很多IO模型
a)内核从IO设备读写数据,放进缓冲区(耗时长)
b)线程从内核复制数据(耗时短)
当调用方主动主动查询和复制数据时,属于同步;当操作系统在数据准备完成后告诉调用方,此时是IO异步。前者可以类比为双11枪东西,用户在一直访问东西是否还有,此时为同步。后者可以理解为公司发布招聘通知,应聘者前去应聘,此为异步。
调用IO的时候,如果缓冲区为空或者满了,调用的线程或进程一直处于等待状态,直到IO可用并完成数据拷贝,此为阻塞;非阻塞指调用IO操作时,内核立马给出结果,如果IO不可用,会返回错误。
一种函数同时监听多个fd操作,这个函数就是我们常说的select,poll,epoll
1)进程是对运行时程序的封装,是系统进行资源分配和调度的基本单元,线程是进程的子任务,是cpu调度和分配的基本单元。
2)一个进程包含多个线程
3)进程之间不会相互影响;而一个线程的崩溃会导致进程崩溃,从而影响其他线程。
多个进程在争夺系统资源的时候处于相互等待的状态
当满足以下4点即为产生死锁
当资源被一个进程使用的时候,其他进程不可使用
一个进程在请求数据的时候被阻塞,而自身占有的数据不释放
一个进程所使用的资源在没有用完的时候不会主动释放,不能被强行剥夺
多个线程处于首尾相接的循环等等待资源状态
代价大,不仅重启产生死锁的进程,其他无关进程也被重启
将产生死锁的进程终结,可以一次性终结,或者根据代价成本依次终结
对于产生死锁的资源进行剥夺,可以一次性剥夺或者分次剥夺
将产生死锁的进程回退到未产生死锁之前的状态