您的位置:首页 > 其它

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

2018-03-18 11:42 706 查看
当然既然是都是 多这个字开头,那么就是多任务,我们需要了解
并发:指的是任务数多余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频繁切换)
多进程:使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多进程 多线程 协程