本节内容:
- 进程与线程区别
- 线程
- a) 语法
- b) join
- c) 线程锁之Lock\Rlock\信号量
- d) 将线程变为守护进程
- e) Event事件
- f) queue队列
- g) 生产者消费者模型
3. python GIL全局解释器锁
1. 进程与线程区别
线程:是操作系统能够进行运算和调度的最小单位,是一堆指令的集合。线程被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程就是cpu执行时所需要的一堆上下文关系。
进程:以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等,对各种资源管理的集合就可称为 进程。进程要操作cpu, 必须先创建一个线程。
进程和线程的区别:
- 线程共享内存空间,进程的内存是独立的
- 线程共用数据,进程数据独立
- 同一个进程的线程之间可以直接交流,两个进程必须通过中间代理实现通信
- 新线程容易创建,新进程需要克隆父进程
- 一个线程可以控制和操作同一进程里的其他线程, 进程只能操作子进程
修改主线程有可能影响到其他线程的行为,对父进程修改不会影响子进程。
2. 线程(threading模块)
a) 语法
先写一个简单的线程:
import threading
import time
def run(n):
print("task" ,n)
time.sleep(2)
t1 = threading.Thread(target=run, args=("t1",))
t2 = threading.Thread(target=run, args=("t2",))
t1.start()
t2.start()
print(t1.getName) #获取线程名
print(t2.getName)
继承式调用:
import threading
import time
class MyThread(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self.num = num
def run(self): # 定义每个线程要运行的函数
print("running on number:%s" % self.num)
time.sleep(3)
if __name__ == '__main__':
t1 = MyThread(1)
t2 = MyThread(2)
t1.start()
t2.start()