线程,进程,多线程,互斥,同步,死锁

1. 首先明确:进程 process > 线程 thread

进程是一个在内存中运行的应用程序,比如qq,微信,exe文件。

进程有独立的一块内存空间,一个进程最少一个线程,也可以拥有多个线程。线程共享进程的内存空间。可以理解为进程是一个人,线程是身体器官。

2. 进程是操作系统资源分配基本单位,而线程处理器任务调度和执行基本单位.

3. 进程和进程之间不会相互影响,但是线程之间会相会影响,一个线程崩溃可能导致其他线程崩溃,进而导致进程破溃。

4. 进程与进程之间不能直接共享数据,需要通过第三方通信协议。线程直接可以共享资源数据。(好比人与人之间交流信息--也就是交互传递记忆数据,需要通过文字、语言、肢体动作的方式)

5. 进程切换会有较大的开销,主要原因是每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换需要保存和恢复这些信息。这包括切换页表全局目录、切换内核态堆栈、切换硬件上下文(如寄存器状态)等。此外,进程切换还会导致处理器缓存(如TLB)失效,从而产生大量的缓存未命中,降低程序运行效率。相比之下,线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销相对较小

 6. python的多线程不是说真正意义上的的同时执行,它是在快速的交替执行。

7.为什么需要多线程:方便操作(一边干嘛一边干嘛...),优化页面GUI,可能提升运行效率

8.多线程缺点:大量线程影响运行,需要太多内存,容易出错,死锁

9.什么适合适合需要多线程:线程之间没有太多复杂信息数据交换,内存空间充足,多线程卖票(类似车站多个窗口卖票)

10.什么时候不需要:线程之间大量复杂信息数据交换

11.互斥:当多个线程需要访问相同的资源时,要求在一个时间段内只能允许一个线程来操作访问该资源,操作完后别的线程才能读取该资源,这叫线程的互斥。简单说就是一件衣服只能让一个人穿,这个人不需要这个衣服后其他人才可以穿。

12. 同步是按照一定访问顺序的互斥(存在优先级),比如某件衣服规定A穿后B穿然后C穿...........

13.线程基本状态:就绪、阻塞、运行。

14.死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

15.死锁产生原因:进程资源分配冲突,执行顺序不对,资源使用没用设置限制

16.避免死锁:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,否则予以分配。这是一种保证系统不进入死锁状态的动态策略。

16.死锁预防:设置资源优先级,资源抢夺,

17.死锁发生后:检测死锁是否存在,采取适当措施,从系统中将已发生的死锁清除掉

银行家算法:当某个进程处于等待状态的时候,它需要的资源不可以被其他线程占用。

猜你喜欢

转载自blog.csdn.net/qq_55906687/article/details/130653067