一、线程
一个进程里面至少要有一个线程,主进程里面的线程称为主线程,其他进程里的线程称为子线程
进程是资源分配的最小单位,线程是CPU调度的最小单位,每一个进程中至少有一个线程。
协程:在单线程下开启的协程,程序员来开。
线程才是真正干活的人
二、如何开启线程
跟开启进程差不多
成功开启一个线程
三、进程和线程的区别
1.进程的开销远远大于线程的开销
进程里面可以开很多个线程
2.进程能利用多核优势,线程就不能利用多核优势
但是,可以开启多个进程,在进程里面再开启线程
3.进程之间的数据隔离的,线程之间的数据不是隔离的,前提:同一个进程之间
四、Thread类中的几个方法
五、多线程实现socket
六、GIL锁(全局解释器锁)
Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行
对Python解释器的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行
1.我们写的代码其实是解释器在执行:
cpython解释器,pypy解释器...
2.GIL锁只存在cpython解释器中,在其他解释器中不存在
3.起一个垃圾回收的线程,起一个正常执行代码的线程,当垃圾回收线程还没有把垃圾回收完毕的时候,会
出现抢占资源的情况
4.我们就需要拿到GIL锁,想要让线程能够正常执行,那么,线程就必须要拿到这把GIL锁
5.保证了同一时刻只有一个线程在执行
进程:可以利用多核
线程:不能利用多核
i/o密集型:不需要计算,一般不消耗CPU,所以就选择线程比较好
计算密集型:在消耗CPU,所以最好选择进程
七、同步锁(互斥锁)
开多进程或者线程一定好吗?
不一定,虽然可以提高效率,但是,会出现安全问题