线程和进程
什么是线程(threading)?
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能。
什么是进程(process)?
在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程。线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。
进程与线程之间的区别?
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)CPU分给线程,即真正在CPU上运行的是线程。
开启进程的两种方式
方式一
1 import time 2 import random 3 from multiprocessing import Process 4 5 def piao(name): 6 print('%s piaoing' % name) 7 time.sleep(random.randrange(1, 5)) 8 print('% s piao end' % name) 9 10 if __name__=="__main__": 11 p1=Process(target=piao, args=('alex',)) 12 p2 = Process(target=piao, args=('egon',)) 13 p3 = Process(target=piao, args=('wpx',)) 14 p4 = Process(target=piao, args=('yh',)) 15 16 p1.start() 17 p2.start() 18 p3.start() 19 p4.start()
方式二
import time import random from multiprocessing import Process def piao(name): print('%s piaoing' % name) time.sleep(random.randrange(1, 5)) print('% s piao end' % name) if __name__=="__main__": p1=Process(target=piao, args=('alex',)) p2 = Process(target=piao, args=('egon',)) p3 = Process(target=piao, args=('wpx',)) p4 = Process(target=piao, args=('yh',)) p1.start() p2.start() p3.start() p4.start()
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,把Process模块换成threading模块,创建方式也差不多。
方式一
from threading import Thread import time def sayhi(name): time.sleep(2) print('%s say hello' %name) if __name__ == '__main__': t=Thread(target=sayhi,args=('egon',)) t.start() print('主线程')
方式二
from threading import Thread import time class Sayhi(Thread): def __init__(self,name): super().__init__() self.name=name def run(self): time.sleep(2) print('%s say hello' % self.name) if __name__ == '__main__': t = Sayhi('egon') t.start() print('主线程')
浙公网安备 33010602011771号