进程
本质上是一段程序的运行过程(抽象的概念)
定义:就是一个程序在数据集上的一次动态执行过程。
由:程序,数据集和进程控制块组成。程序计数器来保存状态。
单个cpu是并发,不是并行,进程之间是来回切换;如果有多个cpu,会有并行,一个cpu跑一个程序;如果2个cpu跑四个程序,肯定是一个cpu跑一个,剩下2个是时间片切换。
线程
两个进程占两个独立的内存空间,彼此相互独立;
线程的出现是为了降低上下文的消耗,共享整个线程的资源;
一个程序至少有一个进程,一个进程至少有一个线程(进程可以理解成线程的容器)
进程在执行过程中有独立的内存单元,多个线程共享这个进程的内存,从而极大提高运行效率。线程不能独立存在。
线程在执行过程与进程有区别的。每个独立的线程有一个程序运行的入口,顺序执行序列和程序的出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
所以:
线程是最小的执行单元;进程是最小的资源单位。
进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单位。
扫描二维码关注公众号,回复:
1245504 查看本文章
线程是cpu调度和分配的基本单位。只拥有一点资源(程序计数器)
同一个进程中的多个线程可以并发执行。
线程的调用以及join方法
python无法用多核。。
如何开多线程
import threading #线程的意思 import time def Hi(num): print('Hello {}'.format(num)) time.sleep(3) if __name__ == '__main__': """ 创建了2个子线程对象,t1,t1是这个对象的实例。 target后面接这个线程跑哪个程序 args是这个程序传入的参数,参数是iterable 三个线程并发进行 """ t1 = threading.Thread(target=Hi, args=(10,)) #Theread是一个类,实例化 子线程1 t1.start() t2 = threading.Thread(target=Hi, args=(9,)) #子线程2 t2.start() print("ending") #主线程,打完后主线程结束,但是子线程还要停个3秒钟,才出现Process finished with exit code 0 import threading import time def music(): print("begin to listen {}".format(time.ctime())) time.sleep(3) print("stop to listen {}".format(time.ctime())) def game(): print("begin to game {}".format(time.ctime())) time.sleep(5) print("stop to game {}".format(time.ctime())) if __name__ == '__main__': t1 = threading.Thread(target=music) #没参数就不用填写args t1.start() t2 = threading.Thread(target=game) # 没参数就不用填写args t2.start() t1.join() t2.join() print("ending") t1 = threading.Thread(target=music) #没参数就不用填写args t2 = threading.Thread(target=game) # 没参数就不用填写args t2.start() #t1运行完后,才运行t2,t1和t2不是同时运行,一共用了8秒 t1.start() t1.join() t2.start() t2.join() print("ending")
setDeamon方法,守护线程,线程和主线程一起退出,不管子线程是否运行完。join方法,主线程等待子线程。
join和setDeamnon都是thread实例对象的方法。
threading.Thread还有run(),start(),insAlive(),getName(),setName()。
threading的其他方法:
threading.active_count() 计算几个线程在活动(包括主线程)
while threading.active_count() == 1: print() #等子线程都做完才运行主线程print
调用方式二:继承的方式
class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self): #定义每个线程要运行的函数,一定要是run print("") time.sleep(3)