多线程多进程协程的区别和不同的应用场景

当然既然是都是 多这个字开头,那么就是多任务,我们需要了解

并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,

        实现⽤多个任务“⼀起”执⾏(实际上总有⼀些任务不在执⾏,因为切换任    
        务的速度相当快,看上去⼀起执⾏⽽已)

并⾏:指的是任务数⼩于等于cpu核数,即任务真的是⼀起执⾏的

多线程(threading):①在⼀个进程内的所有线程共享全局变量,很⽅便在多个线程间共享数据

            ②缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量

                的混乱(即线程⾮安全)

            ③如果多个线程同时对同⼀个全局变量操作,会出现资源竞争问题,从⽽

                数据结果会不正确

 

解决线程同时修改全局变量的⽅式:互斥锁(互斥锁为资源引⼊⼀个状态:锁定/⾮锁定
某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他
线程不能更改;直到该线程释放资源,将资源的状态变成“⾮锁定”,其他的
线程才能再次锁定该资源。互斥锁保证了每次只有⼀个线程进⾏写⼊操作,
从⽽保证了多线程情况下数据的正确性。)

多进程(multiprocessing):进程不共享全局变量

                                              如果子进程因为某种原因崩溃了,不会直接导致主程序的崩溃,可以降低主程序崩溃的概率;

                                                  即使主进程退出了,子进程仍然可以继续工作,比如子进程是推送服务,在主进程退出的情况下,仍然能够保证用户可以收到推送消息。


协程(greenlet,gevent升级版):

            ①⽐线程更⼩占⽤更⼩执⾏单元(理解为需要的资源)

            ②它是⼀个执⾏单元,因为它⾃带CPU上下⽂

              通俗的理解:在⼀个线程中的某个函数,可以在任何地⽅保存当前函数的⼀
些临时变量等信息,然后切换到另外⼀个函数中执⾏,注意不是通过调⽤函
数的⽅式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开
发者⾃⼰确定

            

进程,能够完成多任务,⽐如 在⼀台电脑上能够同时运⾏多个QQ
线程,能够完成多任务,⽐如 ⼀个QQ中的多个聊天窗⼝


定义的不同
进程:是系统进⾏资源分配和调度的⼀个独⽴单位.
线程:是进程的⼀个实体,是CPU调度和分派的基本单位,它是⽐进程更⼩的
          能独⽴运⾏的基本单位.线程⾃⼰基本上不拥有系统资源,只拥有⼀点在运
          ⾏中必不可少的资源(如程序计数器,⼀组寄存器和栈),但是它可与同属⼀
          个进程的其他的线程共享进程所拥有的全部资源.
区别
    ⼀个程序⾄少有⼀个进程,⼀个进程⾄少有⼀个线程.
    线程的划分尺度⼩于进程(资源⽐进程少),使得多线程程序的并发性⾼。        
    进程在执⾏过程中拥有独⽴的内存单元,⽽多个线程共享内存,从⽽极        

⼤地提⾼了程序的运⾏效率

    线线程不能够独⽴执⾏,必须依存在进程中
    可以将进程理解为⼯⼚中的⼀条流⽔线,⽽其中的线程就是这个流⽔线
上的⼯⼈


优缺点:线程和进程在使⽤上各有优缺点:线程执⾏开销⼩,但不利于资源的管理和

            保护;⽽进程正相反。

协程和线程差异
在实现多任务时, 线程切换从系统层⾯远不⽌保存和恢复 CPU上下⽂这么简
单。 操作系统为了程序运⾏的⾼效性每个线程都有⾃⼰缓存Cache等等数
据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换⾮常耗性
能。但是协程的切换只是单纯的操作CPU的上下⽂,所以⼀秒钟切换个上百
万次系统都抗的住。

小结:

1. 进程是资源分配的单位

2. 线程是操作系统调度的单位
3. 进程切换需要的资源很最⼤,效率很低
4. 线程切换需要的资源⼀般,效率⼀般(当然了在不考虑GIL的情况下)

5. 协程切换任务资源很⼩,效率⾼

6. 多进程、多线程根据cpu核数不⼀样可能是并⾏的,但是协程是在⼀个线
程中 所以是并发


应用场景:

多线程 : 常见的浏览器、Web服务(现在写的web是中间件帮你完成了线程的控制),web处理请求,各种专用服务器(如游戏服务器)

需要频繁创建销毁的优先用线程

需要进行大量计算的优先使用线程(CPU频繁切换

多进程:使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的



  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值