进程、线程、协程之间的区别

进程

å¨è¿éæå¥å¾çæè¿°

通俗的讲就是一段正在运行的程序。但又与程序不同,程序是存储在磁盘上的二进制可执行文件。进程是指一个正在运行的程序,他是动态的,而程序是一个静态的文件,进程是程序的一次实例化。

作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位

IPC(信号量 、共享内存、管道、消息队列、套接字)

线程

线程其实就是进程里的一条或者多条执行路径,被称为是轻量级进程。是运算调度的最小单位

IPC(信号量、条件变量、互斥锁、读写锁)

进程和线程之间的区别

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

 

        多进程优点:

  1、每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

  2、通过增加CPU,就可以容易扩充性能;

  3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

  4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。

  多进程缺点:

  1、逻辑控制复杂,需要和主程序交互;

  2、需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大;

  3、最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

  4、方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

  多线程的优点:

  1、无需跨进程边界;

  2、程序逻辑和控制方式简单;

  3、所有线程可以直接共享内存和变量等;

  4、线程方式消耗的总资源比进程方式好。

  多线程缺点:

  1、每个线程与主程序共用地址空间,受限于2GB地址空间;

  2、线程之间的同步和加锁控制比较麻烦;

  3、一个线程的崩溃可能影响到整个程序的稳定性;

  4、到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

       5、线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。

应用场景

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

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

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

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

协程

å¨è¿éæå¥å¾çæè¿°

协程是一种比线程还要轻量级的存在,它不是被操作系统内核所管理,而是被用户程序所管理(用户态执行)

子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。

协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。

协程的特点在于是一个线程执行,那和多线程比,协程有何优势?

  • 极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
  • 不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值