1、线程与进程的区别是什么?(怎么理解怎么写)
进程是程序运行的状态和过程。
进程会占用内存中的一块空间,消耗资源。
每个进程最少会有一个线程(主线程),可以有多个线程。
pyyhon在运行的过程中最多只能有一个线程调用CPU资源,那是因为在每个进程前面有GIL全局解释器锁。
多个线程通过全局解释器锁是靠操作系统分配的,同一时刻只能有一个线程获得CPU资源 ,如果该线程
遇到IO操作,操作系统会将CPU分配给别的线程做运算,直到该线程IO操作结束继续计算。
如果多线程计算过程调用了全局变量就需要注意线程安全的问题,该问题只有多线程运算会遇到,
线程安全的问题会直接影响程序运行结果。
线程安全可以用互斥锁、迭代锁来解决。互斥锁相当于用户设置一个锁控制线程调用CPU资源,在一个线程调用CPU的过程中
即便遇到IO操作由于锁的原因也不会将资源分配给其他线程使用,起到了串行计算的作用,由于互斥锁设置方便,可以自主
设置锁住的位置和解锁的位置所以比单纯的单线程用JOIN的方式效率更高。
由于互斥锁功能相对简单,不恰当的使用会导致死锁现象,所以有了迭代锁的概念,用treading.RLock()控制,
起到线程串行的作用,不会导致线程安全问题。
2、在 Python 中,哪一种多线程的程序表现得更好,I/O 密集型的还是计算 密集型的?
在python中多线程更适用于IO密集型操作,并不适用于计算密集型。
由于python的机制是当一个线程遇到IO操作的时候会将CPU资源给下一个线程使用,直到IO操作结束才会继续调用CPU资源。
这样的机制导致PYTHON更适用于IO密集型,而计算密集型在多个线程的时候会处于并发的状态,当一个线程计算一半的时候将
CPU资源分配给其他的线程计算,上一个计算的结果还需要保存起来,占用资源,另外多个线程计算在切换的过程中是消耗资源的,
并且计算的效率并没有提升反而有下降,故并不建议用python多线程运行计算密集型的代码。