python-多线程
1. 什么是线程
在了解线程前,我们需要首先了解一下进程,并了解其与线程之间的关系。
1)进程可以看做一个独立的应用,而线程却不可以;
2)进程有自己独立的内存地址空间(即不共享内存,并互不影响),
线程只是进程的不同执行路径,线程没有独立的内存地址空间;
3)一个进程最少包含一个线程,同一个进程下的多个线程共享进程的地址空间,
一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行;
4)每个进程都有一个程序运行的入口,顺序执行序列和程序的出口,
但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制;
5)进程是资源分配的最小单位,线程是CPU调度的最小单位
线程就是来工作的,进程是拥有资源者
6)进程之间的切换比线程之间的切换开销大,使用多线程实现多任务并发执行比使用多进程效率高
说明:操作系统在创建进程时,需要为该进程分配独立的内存空间及其他相关资源,而线程的创建相对简单的多
7)每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。
指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。
线程可以被抢占(中断)。
在其他线程正在运行时,线程可以暂时搁置(也称为睡眠) -- 这就是线程的退让。
2. 为什么要使用多线程
1)使用多线程可以把占据时间长的任务放到后台去处理(比如IO操作,网络数据的收发等),这时我们可以释放一些资源,如内存占用等
2)使用多线程,程序的运行速度会可能会加快
3. python实现多线程
1)自定义线程,继承threading.Thread来实现自定义线程
1 import threading
2 import time
3
4 class MyThread(threading.Thread):
5
6
7 def __init__(self, num):
8 super(MyThread, self).__init__()
9 self.num = num
10
11 def run(self):
12 print("thread_name: %s, num: %d" % (threading.current_thread().getName(), self.num))
13 time.sleep(2)
14 print("num:", self.num)
15 time.sleep(1)
16 print("end, ", self.num)
17
18
19 if __name__ == '__main__':
20 thread1 = MyThread(1)
21 thread2 = MyThread(2)
22 thread1.start()
23 thread2.start()