Python学习关于线程的和进程

1.线程的生命周期

1.1.新建:创建线程

1.2.就绪:等待调度

1.3.运行:调度成功

1.4.阻塞:暂停运行

1.5.消亡:执行完毕或者异常终止

可能有三种情况从运行到阻塞:

  1. 同步:线程获取同步锁,但是资源已经被其他线程锁定,会进入阻塞.
  2. 睡眠:线程运行sleep或者join线程.
  3. 等待:线程执行wait方法,等待其他线程notif

2.多线程是共享全局变量

在一个进程内的所有线程共享全局变量

但是,线程对全局变量随意修改可能会造成多线程之间全局变量的混乱

3.同步和互斥

在多任务操作系统中,同时运行多任务可能:

  1. 都需要使用同一个资源
  2. 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务

3.1互斥:一个公共资源同一时刻只能被一个进程或者线程使用,多任务不能同时使用

3.2同步:多个任务的运行必须严格按照某种先后次序运行

同步是一种更为复杂的互斥,而互斥是一种特殊的同步,也就是说同步和互斥都是不能同时运行线程.

4.互斥锁

当多个线程几乎同时修改某一个共享数据时,需要进行同步控制.线程同步能够保证线程安全访问竞争资源,最简单的同步机制就是引入互斥锁.

互斥锁为资源引入一个状态:锁定/非锁定

  1. 某个线程想要更改共享数据时,先将其锁定,此时资源的状态为”锁定”,其他的线程不能修改
  2. 直到线程使用完资源,将资源的状态修改为”非锁定”,其他的线程才能再次锁定这个资源

5.死锁

如果多个公共资源,在线程共享多个资源的时候,两个线程分别占有一部分资源并且同时等待对方的资源,就会引起死锁

6.协程

微线程,是python中另一种实现多任务的方式,只不过比线程占用更小的执行单元(资源).

协程自带cpu上下文,这样就能在合适的时机,从一个协程切换到另一个协程,只要这个过程中保存或回复cpu上下文那么程序就可以运行.

多任务操作系统,支持远大于cpu数量的任务同时运行.这些任务实际上并不是真的在同时运行,而是在很短的时间内,操作系统将cpu轮流分配给他们,造成同时运行的错觉.

在每个任务运行前,cpu需要知道任务从哪里开始运行,又是从哪里开始加载,也就是说,需要事先设置好cpu寄存器和程序计数器.这些都是cpu在运行任务之前必须依赖的环境,称之为cpu上下文.

cpu寄存器是cpu内置的容量小速度快的内存

你可能感兴趣的:(学习,python)