python3 进程与线程

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()

 

posted @ 2018-09-06 15:36  日出东海,我心向西  阅读(153)  评论(0编辑  收藏  举报