回顾:
线程:资源的集合;内存共享,两个或多个线程同时修改一份数据时,形成结果可能不正确,必须加锁
守护进程:在start以前设置setDemo()
队列queue:做用解耦,使程序之间是实现松耦合,提升处理效率
FIFO:先进先出
LIFO:后进先出
队列中的数据使用完就没了(消费者生产者模型)
事件event:(红绿灯模型)
python中的多线程是一个假象,咱们是利用它上下文切换
io操做不占用CPU,计算操做占用CPU,
python中大量的计算反而会使程序变得更慢
python的多线程不适合CPU密集操做型的任务,适合io密集型的任务
进程之间不能互相访问,不须要锁的概念
多进程能够解决多核的问题
每个子进程都是由它的父进程启动的,主进程自己的父进程是python自己
if __name__ =="__main__" 手动执行时会执行下面的代码,如果当成一个模块让其余调用则不执行
:微线程,一种用户态的轻量级线程,在单线程下实现并发的效果,cpu根本不知道,单线程,不须要锁。协程跑在线程上,线程跑在进程中。
单线程是串行的
在单线程下实现并发的效果:各协程遇到IO操做就切换,只剩下CPU运算;何时再切回去???IO操做完了就切回去,程序自动检测IO操做完了
异步IO
论事件驱动和异步IO
与
IO 多路复用
用户空间和内存空间:
进程切换:保存上下文
进程的阻塞:
文件描述符:用于表述指向文件的引用的抽象化的概念,一个非负整数,一个索引值
文件句柄:实际存在的
缓存I/O:数据会先被拷贝到操做系统内核的缓冲区中,而后才会从操做系统内核的缓冲区拷贝到应用程序的地址空间。
内核态到用户态的数据切换:用户态没有权限直接对内核进行操做,只能调用内核的接口,由操做系统的内核进行操做
二 IO模式
阻塞I/O:
非阻塞I/O:
I/O多路复用
select 把收到的多个socket发送给内核,有一个连接活跃,内核就将检测到的内容返回给用户(可是不告诉用户是哪一个连接活跃),让用户确认再调用
异步I/O
内核处理完,直接将数据拷贝到用户态,不会产生block
I/O多路复用三种模式:
select
poll
epoll
和select比较,好处:没有最大检测数的限制,
返回连接响应