1、资源的分配。
多进程中的子进程与主进程所拥有的资源是一致的,不多也不少,子进程之间不可以互相通信,也就不能修改全局变量,可以保护,管理资源,因此运行多进程时占用内存较高,运行效率高。
多线程中的子线程与主线程共享一个资源,子进程之间可以互相通信,可以修改全局变量,不利于资源的管理和保护,运行多线程时占用内存较低,并发性高。
2、查看方式不同。
线程:threading.enumerate() >>> 查看线程数量
进程:os.getpid()>>>查看进程序列号
os.getppid()>>>查看父进程序列号(get parent process id)
ps -aux >>>linux中查看全部进程
kill 进程序列号 >>>杀死指定进程
kill -9 进程序列号 >>>强制杀死进程
3,限制关系不同。
线程:主线程(整个python程序)将在所有非守护线程退出后才退出,也就是说要关闭主线程时,主线程会等待子线程执行完毕之后关闭,因此线程不稳定。
进程:主进程(整个python程序)可以随时退出,不会影响子进程的运行,因为子进程拥有与主进程相同的资源与程序,因此进程比较稳定。
4、创建方法不同。
线程:使用threading模块
t = threading.Thread(target=test,args=(n,),kwargs={"name":"陈"})
t.start()
进程:使用multiprocessing模块
p = multiprocessing.Process(target=test,args=(n,),kwargs={"name":" 陈"})
p.start()
5、运行场景不同:
线程:类似与一个程序中实现多个功能。
进程:类似与电脑上运行多个程序。
6、定义不同:
进程:系统进行资源分配和调度的基本单位。
线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程用已经被分配的资源单位去执行任务。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
7、通信机制:
进程之间,相互独立,进程的通信机制使用消息队列,套接字等,而线程由于共享全局变量,通信机制很方便。
8、最后使用场景:
需要更稳定安全时,适合选择进程,需要速度,效率时,选择线程更好。没有进程便没有线程,进程拿到资源合理分配给线程使用。
领取专属 10元无门槛券
私享最新 技术干货