进程

启动多个进程,进程之间通过操作系统调用,操作系统又有一个时间片的概念,这样多CPU的话就可以调用多个进程。

线程

启动多个线程,真正被CPU执行的最小单位是线程,在Cpython中由于GIL锁的概念,同一时刻只能有一个线程工作。再其它语言中允许用一时间调用多个线程执行。不会影响高IO的操作。

弊端:开启一个线程,创建一个线程 需要创建寄存器,堆栈。
 

协程

本质就是一个线程,在多个任务之间来回调用,不需要创建寄存器,堆栈。

 

进程:
    进程是一个正在运行的程序,程序不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序称之为进程。
进程的提出是在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行,大大提高了CPU的利用率。进程就是为了在CPU上实现多道编程而提出的。

但是进程也有很多缺点例如:
    - 进程只能在同一时间干一件事,如果同时干两件事或多件事,进程就无能为力了。
    - 进程在执行的过程中如果出现阻塞,例如等待输入,整个进程会被挂起。
    - 进程开销大,创建,撤销与切换存在较大的时空开销。

后来出现了线程,线程是CPU调度的最小单位,每个进程中至少有一个线程。

线程比进程的优势:
    - 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程共享。
    - 通信: 进程间通信IPC,线程间可以直接读写进程的资源。
    - 调度和切换:线程上下文切换要比进程上下文切换要快得多。

全局解释器锁GIL
    - 由于CPython解释器锁的原因,同一时刻只能有一个线程运行,所以Python在CPython解释器中的多线程形同虚设。


递归锁和互斥锁
    递归锁(RLock)是为了解决死锁问题,且在线程中,递归锁可以被acquire多次。
    互斥锁(Lock)

信号量        KTV同一时刻只能有几个人进入到这个房间  同一时间只能有N个线程处理

事件
View Code

相关文章:

  • 2022-12-23
  • 2021-07-03
  • 2021-04-04
  • 2022-12-23
  • 2021-10-29
  • 2021-05-09
  • 2021-09-02
猜你喜欢
  • 2022-12-23
  • 2021-07-15
  • 2022-02-08
  • 2021-11-29
  • 2022-02-17
相关资源
相似解决方案