几乎所有语言在学习的过程中,都会碰到线程和进程的问题,也应该是大部分“程序员”学习后最容易忘记的内容内容,那么他们之间到底有什么不同呢?
1、进程和线程的定义
进程是一个术语,用来描述一组资源和程序所需的内存分配,也就是各种资源的集合、一个程序执行的实例。进程之间独立享用资源。
线程是一堆指令的集合,操作系统调用CPU的最小单位,他是比进程更小的能独立运行的基本单位。所有线程之间共享资源,系统创建好进程后,实际就启动执行了该进程的主线程,主线程终止了,进程也就随之终止,每一个进程至少有一个线程。
2、进程与线程的区别:
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
1) 第一,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,因此多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。
3、用法
线程案例:
import threading import time
#线程锁 lock = threading.Lock() # 我定义的线程类 class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self): # lock.acquire() print("Thread--"+self.num,end='\n') time.sleep(2) # lock.release() thread_lists =[] for i in range(100): t = MyThread("t"+str(i)) t.setDaemon(True) # 设置守护线程 t.start() # t.run() thread_lists.append(t) for t in thread_lists: t.join() t1 = MyThread("t1") t2 = MyThread("t2") t1.run() t2.run()
进程案例:
import multiprocessing import time def run(n): print("进程%s"% str(n)) time.sleep(1) if __name__ == "__main__": for i in range(10): p = multiprocessing.Process(target=run,args=(i,)) #创建多进程 p.start() #启动多进程