Python3之多线程(一):简介

释放双眼,带上耳机,听听看~!

进程、线程与并发

进程

  • 是一个执行中的程序
  • 每个进程都拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据
  • 操作系统管理其上所有进程的执行,并为这些进程合理地分配时间
  • 进程也可通过派生(fork 或 spawn)新的进程来执行其他任务

线程

在同一个进程下执行,并共享相同的上下文

一个进程中的各个线程与主线共享同一片数据

线程包括开始、执行顺序和结束三部分

它可以被抢占(中断)和临时挂起(也称为睡眠)——让步

一般是以并发方式执行

并发

问:等同于并行处理?答:并发不是并行处理

是一种属性——程序、算法或问题的属性

并行只是并发问题的可能方法之一

如果两个事件互不影响,则两个事件是并发的

对多核的利用

Python之多线程(二)对多核的利用及GIL概念

对多核的利用 单核CPU系统中,不存在真正的并发 GIL——全局解释器锁 GIL只是强制在任何时候只有一个线程可以执行Python代码 IO密集型应用与CPU密

实现一个线程

  • 用threading模块代替thread模块
  • 用threading.Tread创建线程
  • start()启动线程
  • join()挂起线程

 

threading模块的对象

对象 描述
Thread 表示一个执行线程的对象
Lock 锁原语对象(和thread模块中的锁一样)
RLock 可重入锁对象,使单一线程可以(再次)获得已持有的锁(递归锁)
Condition 条件变量对象,使得一线程等待另一个线程满足特定的“条件”,比如改变状态或某个数据值
Event 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有线程将被激活
Semaphore 为线程间共享的有限资源提供了一个“计数器”,如果没有可用资源时会被阻塞
BoundedSemaphore 与Semaphore相似,不过它不允许超过初始值
Timer 与Thread相似,不过它要在运行前等待一段时间
Barrier 创建一个“障碍“,必须达到指定数量的线程后才可以继续

Thread对象数据属性

属性 描述
name 线程名
ident 线程的标识符
daemon 布尔标志,表示这个线程是否是守护线程

 

Python之多线程(三)实现一个线程

线程的两种实现方式 一:、使用def方法方式来实现 先 import 我们的模块: import threding import time 延时模块 建一个线程需要执行的代码: d

线程之间的通信

线程的调度和优化

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧