多线程多进程协程的区别和不同的应用场景
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频繁切换)
多进程:使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的
并发:指的是任务数多余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频繁切换)
多进程:使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的
相关文章推荐
- Java中组合与继承的区别与不同的应用场景
- 操作系统------多线程与多进程的区别和应用场景
- 【转】多进程 & 多线程的区别与适用场景
- Hadoop、Storm、Spark这三个大数据平台的区别和不同的应用场景
- 多进程和多线程的区别及适用场景
- (转)多进程 & 多线程的区别与适用场景
- 多进程和多线程的应用场景
- Unity3d 协程 多线程 异步区别
- 深入浅析python中的多进程、多线程、协程
- 【多线程 1】多线程的应用场景:从指令流水线—多线程
- 悲观锁和乐观锁的区别和应用场景
- 多线程等待(超时)/通知的应用场景-数据库连接池
- Android Support v4、v7、v13的区别和应用场景
- WCF与Web API 区别(应用场景)
- Android兼容包Support v4.v7.v13区别与应用场景
- mybatis和hibernate的本质区别和应用场景简介
- 站在不同的角度看权限问题、不同的应用场景看待权限问题
- python(33)多进程和多线程的区别
- String、StringBuilder和StringBuffer的区别和应用场景
- 多线程和多进程之间的区别(总结)