第十一周作业-并发编程
1. 理解并简述并发与并行
- 并发 concurrency,同时做某件事,重点在一段时间内有事需要处理。与之对应的概念是顺序执行,即前一个任务必须做完了后一个任务才能开始,而并发可以先做A任务,做一半时(IO等待)阻塞A任务开始处理B任务这样来回切换,最终完成所有任务。
- 并行 parallel,在同一时刻互不干扰的做多件事,有多个处理单元同时进行处理。与之对应的是串行,只有一个处理单元,同一时刻必定只有一件事被处理。
并发与并行并不是互斥的概念,并发更关注任务的实际调度,并行更关注任务的实际执行。
![image]()
如上图所示,并发是两个(多个)队列交替使用咖啡机,并行是两个(多个)队列分别使用两个(多个)咖啡机。
2. 理解线程与进程,并说明它们的应用场景
进程类似国家的概念,线程可以理解为国家中的省。
- 进程 process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。
- 在实现了线程的操作系统中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际工作的单位。
- 一个标准的线程由线程ID、当前指令指针、寄存器集合、堆和栈组成。
- 线程在进程中运行,类似省之于国家。
- 一个进程可以包含多个线程,一个国家可以有很多个省。
- 不同进程间不易进行数据共享,而同一进程中的线程可以通过进程共享数据。(国家间贸易需要各种条件,国家内省之间的活动要方便的多)
- 创建一个进程要比创建线程开销大。
一个python程序中,会启动一个解释器进程,所有线程共享一个解释器进程。
3. Python中的GIL是什么,它影响什么
GIL指的是全局解释器锁,是Cpython中解释器进程上的一把锁。
GIL保证了在Cpython进程中,只有一个线程执行字节码,甚至在多核CPU中也只允许同时在一个CPU上运行该进程的一个线程,即在一个进程中只能并发不能并行。
由于GIL的存在python的内置数据类型在多线程编程中是线程安全的,但实际上它们本身并不是线程安全类型。
在Cpython中IO密集型使用多线程较为核算,CPU密集型代码使用多线程需要绕开GIL或使用其它语言。
GIL带来的问题是python不能真正的实现多线程,但同时也降低了初学者的门槛。


浙公网安备 33010602011771号