二十九、Python之进程与线程的区别

进程线程的区别联系

区别联系

【1】 两者都是多任务编程方式,都能使用计算机多核资源

【2】进程的创建删除消耗的计算机资源比线程多

【3】进程空间独立,数据互不干扰,有专门通信方法;线程使用全局变量通信

【4】一个进程可以有多个分支线程,两者有包含关系

【5】多个线程共享进程资源,在共享资源操作时往往需要同步互斥处理

【6】进程线程在系统中都有自己的特有属性标志,如ID,代码段,命令集等。

使用场景

【1】任务场景:如果是相对独立的任务模块,可能使用多进程,如果是多个分支共同形成一个整体任务可能用多线程

【2】项目结构:多种编程语言实现不同任务模块,可能是多进程,或者前后端分离应该各自为一个进程。

【3】难易程度:通信难度,数据处理的复杂度来判断用进程间通信还是线程同步互斥方法。

要求

1. 对进程线程怎么理解/说说进程线程的差异?

    答:都是利用计算机多个资源进行多任务编程的实现方式;进程的创建销毁相对于线程消耗的资源较多;一个进程内可以有多个线程;进程间通讯有特殊方法,线程间使用全局变量(共享资源)进行通讯,通讯时需要处理同步互斥问题。

2. 进程间通信知道哪些,有什么特点?

    答:管道通信Pipe:单向或者双向;消息队列Queue:先进先出;内存共享Value/Array:共同影响全局变量 ;信号量Semaphore:控制信号量数量

3. 什么是同步互斥,你什么情况下使用,怎么用?

    答:同步表示协作,人为控制线程的先后顺序,互斥表示同一时刻数据只能被一个线程所拥有,等待解锁后,别的线程才可使用,例如:转账系统,同一时刻发生转账的两个账户金额必须进行上锁处理,避免转账的同时别的线程对金额造成修改而产生数据混乱

4. 给一个情形,说说用进程还是线程,为什么?

    答:如果出发点时提高效率,建议使用进程,因为线程因为GIL问题,无法有效提高效率。IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能提升程序执行效率)。所以python的多线程对IO密集型代码比较友好。

5. 问一些概念,僵尸进程的处理,GIL问题,进程状态?

    答:僵尸进程使用singal模块处理,GIL问题导致即使使用多线程处理计算密集型程序因为无法提高效率,有时反而导致效率更低,进程状态大体分为:就绪,运行,等待三状态

发布了39 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiaotien/article/details/104515212