1.进程定义
狭义的定义: 进程是正在运行的程序的实例。
广义的定义:进程是一个具有 一定独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
我们都知道程序,一个程序是静态的,通常是存放在外存中的。而当陈旭被调入内存中运行后,就成了进程。顾名思义,进程就是进行中的程序,它是个动态的概念。是系统进行资源分配与调度的基本单位。
2.线程定义
线程: 一堆指令的集合
一个进程内部可能包含了很多顺序执行流,每个顺序执行流就是一个线程。
每个进程启动时候会自动启动一个线程,通常这个线程被称之为主线程。 其他的线程可以由主线程创建,每个线程可以创建自己的子线程
3.进程与线程的区别:
1.线程共享内存空间,每个进程则是相互独立的。(比如word不能访问qq)
2.一个进程里的线程之间可以直接交流(数据共享),两个进程想通信必须通过一个中间代理来实现,进程间是相互独立的不能直接通信。
3..创建新线程很简单,创建新进程需要对齐父进程进行一次克隆。(duplication)
4.一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作其子进程
5.对于主线程的修改可能会影响到其他线程的运行。但是对父进程的修改不会影响到其子进程,但是不能挂掉父进程,如果挂掉父进程则子进程也会挂掉。
4.多线程实例:
单线程:
import threading,time def run(n): print("task",n) time.sleep(2) starttime = time.time() #t1 = threading.Thread(target=run,args=("t1",)) #t2 = threading.Thread(target=run,args=("t2",)) #t1.start() #t2.start() run("t1") run("t2") endtime = time.time() print(endtime-starttime)
执行结果:
[python@heaven-00 0906]$ python threadingtest.py
task t1
task t2
4.004261016845703
多线程:
import threading,time def run(n): print("task",n) time.sleep(2) starttime = time.time() t1 = threading.Thread(target=run,args=("t1",)) #注意此处args参数 即使是一个参数后面也要有“,” t2 = threading.Thread(target=run,args=("t2",)) t1.start() t2.start() #run("t1") #run("t2") endtime = time.time() print(endtime-starttime)
执行结果:
[python@heaven-00 0906]$ python threadingtest.py
task t1
task t2
0.0005490779876708984
通过对比可以看出,多线程时候程序会在一个线程运行时候并行运行后面的代码,大大提高了工作效率。
通过类启用线程:
import threading,time class MyThread(threading.Thread): #定义自己的线程类,继承threading.Thread类 def __init__(self,n): super(MyThread,self).__init__() #重构 self.n = n def run(self): print("running task ",self.n) t1 = MyThread("t1") t2 = MyThread("t2") t1.run() t2.run()