多任务:
多进程、进程池(重复利用固定数量的进程,减少关闭、开启的开销资源和节约内存)
进程: 进程是操作系统资源分配的最小单位
进程独立的空间,直接可以使用队列进行通信,也可以使用文件、内存、redis等进行共享通信
比较稳定、可利用多核、开销大
多线程、线程池(重复利用固定数量的进程,减少关闭、开启的开销资源和节约内存)
线程:是CPU调度的基本单位,程序 执行最小单元,一个进程至少一个主线程,可以多线程
线程共享内存空间,会出现资源竞争问题,有GIL锁导致无法利用多核并行(无法真正意义上的并发),代码资源紧张可以通过加互斥锁防止
死锁原因:两个程序互相等待对方释放锁,双方都没有释放导致程序僵持无法继续往下运行
死锁解决:给锁加上合适的过期时间
没有进程稳定,但比进程轻量级,切换开销小,占用资源少,共享资源方便
协程:
相当于单线程中,可以挂起的函数。函数遇到IO自动挂起(底层可能是函数有yield关键字,挂起),切换到别的任务继续运行,实现任务交替运行,开销极小
进程包含线程 线程包含协程
迭代器和生成器:
可迭代对象实现了可迭代协议即 实现 __iter__魔法方法的对象,可以使用for进行遍历
迭代器:用于节省内存空间,可以生产数据的一个对象
生成器: 特殊的迭代器,特殊的实现迭代器功能的方式
1.把列表推导式改为元组,它就是生成器
2.一个函数里使用yield关键字,就是生成器
深浅拷贝:
浅拷贝 是指将对象第一层进行拷贝,其元素的地址引用仍然是指向被拷贝的 拷贝对象元素的修改会相当于被拷贝的数据
深拷贝 是指将对象的所有层级都重新拷贝出来,其地址指向不再指向被拷贝对象 数据隔离,修改不受影响
https://www.bilibili.com/video/BV1jT4y1G7AN/?spm_id_from=333.337.search-card.all.click
udp :不可靠的,不建立连接,直接发,不在乎对方是否已收到
tcp:面向连接的,可靠的,超时重发