进程(Process)
是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程(Thread)
有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,一个进程可以包含多个线程,但是线程不能包含多个进程。线程自己不拥有系统资源 ,在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程与进程的区别
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。
Tips:
LoadRunner和Jmeter性能测试工具也利用了多线程和多进程来构造多个并发用户来执行性能测试。
线程与进程图文解释
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html
1、单线程
单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
案例:一个学生先用2秒说话,接着用3秒写字,最后结束。
from time import ctime,sleep
def talk():
print("Start talk %r" %ctime())
sleep(2)
def write():
print("Start Write! %r" %ctime())
sleep(3)
if __name__=="__main__":
talk()
write()
print("All end %r" %ctime())
if name==“main”: 表示如果当前模块是被直接运行的,则该语句之后代码块被运行,如果模块是被导入的,则代码块不被运行。
2、多线程
多线程(MultiThreading)是指从软件或者硬件上实现多个线程并发执行的技术。
案例:让学生同时进行说和写操作
from time import ctime,sleep
import threading
def talk(content,loop):
for i in range(loop):
print("Start Talk %s %s" %(content,ctime()))
sleep(3)
def write(content,loop):
for i in range(loop):
print("Start Write %s %s" %(content,ctime()))
sleep(5)
threads=[]
t1=threading.Thread(target=talk,args=('Speak: Hello,51zxw',2))
threads.append(t1)
t2=threading.Thread(target=write,args=('Write: Life is Short You need Python!',2))
threads.append(t2)
if __name__=='__main__':
for t in threads:
t.start()
for t in threads:
t.join()
print("All the End %r" %ctime())
3、多进程
与多线程相比,多进程就是import multiprocessing 然后替换相应的方法multiprocessing.Process()
from time import sleep,ctime
import multiprocessing
def talk(content,loop):
for i in range(loop):
print("Talk: %s %s" %(content,ctime()))
sleep(2)
def write(content,loop):
for i in range(loop):
print("Write: %s %s"%(content,ctime()))
sleep(3)
process=[]
p1=multiprocessing.Process(target=talk,args=('hello 51zxw',2))
process.append(p1)
p2=multiprocessing.Process(target=write,args=('Python',2))
process.append(p2)
if __name__=='__main__':
for p in process:
p.start()
for p in process:
p.join()
print("All process is Run %s" %ctime())