什么是多线程
当执行多个任务的时候,可以用多个进程来执行,也可以用一个进程中多个线程来实现,线程是操作系统进行运算调度的最小单元(进程是操作系统进行资源分配的最小单位)。
线程和进程的区别
进程间内存不是共享的。多线程之间内存是共享的,这样多线程执行效率会更高。但是也正是由于此,使用多线程时,一个线程出现问题可能会导致整个进程出现问题。多进程这方面会显得代码会健壮的多。
多进程和多线程的区别
1.首先,进程是操作系统进行资源分配的最小单元,而线程是cpu执行运算调度的最小单元(如果你需要进行大量的计算,使用多线程。)
2.多进程优点是稳定性高(内存独立),缺点是开销很大,操作系统同时运行进程数是有限的。多线程执行效率比多进程快一些(内存共享),缺点是稳定性有问题,一个线程挂了可能会导致整个进程出问题(内存共享)。
死锁
多线程之间有多把锁的时候,相互等待对方的锁,导致互相占用资源不释放。
防止死锁机制
多线程中死锁问题出现很多时候是由于一个线程占用多把锁导致的,为了解决这个问题,为每把锁分配一个id,只准按照升序规则使用多个锁。另一个策略,给上锁加一个时限,超过时间,自动释放这把锁。
多线程之间通信
1.共享内存通信
2.管道通信pipe
3.消息队列queue
进程之间通信
python GIL锁
全局性解释锁,为了保证线程安全,Cpython中存在这把锁,由于这把锁的存在,python解释器同一时间只允许一个线程进行执行,导致多核的情况下,也只能发挥单核的性能。