进程与线程的区别

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、最后使用场景:

需要更稳定安全时,适合选择进程,需要速度,效率时,选择线程更好。没有进程便没有线程,进程拿到资源合理分配给线程使用。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180713G08KGR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券