中断是指当操作系统执行一个程序的时候,当该程序遇到IO阻塞,运行时间过长,或急需CPU处理的事件,CPU会终止运行当前的程序切换执行其他的进程,然后再回过来执行原来的进程。 中断可以充分得利用CPU的资源,使CPU高效的工作。
当程序执行系统调用的时候陷入执行内核代码的时候,就称进程处于内核状态,这时CPU可以访问内存中的所有数据。CPU可以自行被其他程序调用。 当程序执行自己代码的时候,就称当前程序处理用户态。此时程序占用CPU的能力被剥夺,CPU资源可以被其他程序获取。
进程指的是正在执行的过程, 程序指的是一堆的代码
进程相当于一个车间,那么线程就相当于车间里面的一条流水线。 进程是把资源集合在一起,那么线程才是CPU执行的单元。
程序被加载到内存中,然后通过解释器进行处理和调用系统
系统调用指的是应用程序通过操作系统提供的接口来调用操作系统和硬件
队列和消息都是用来传递消息的 队列相对比较高级,有优先级等比较高级的用法 管道相对比较单一,管道分PIPE和FIFO,PIPE是无名的,所以只能在进程内或父子进程间通信,FIFO可任何两个进程间通信了
join是等待线程执行完毕,适用于当主进程执行到某一阶段时,主线程需要等待子线程执行完毕时才能执行。 daemon 为守护进程,即当主线程结束时,子进程立马终止。
event来实现线程之间的通信
相同点:都是线程锁 不同点:Lock会造成死锁,Rlock不会造成死锁
当有请求来的时候,会发送到select,然后select再告诉有没有数据要读取,select可以同时监控多个套接字,然后同时返回给套接字。 注意:如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接
select可以同时监控多个socket是否可读可写,IO多路复用的机制 缺点: (1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)select支持的文件描述符数量太小了,默认是1024
