进程线程协程

  1. 进程和线程的区别

(1)线程是程序执行的最小单位,进程是操作系统分配资源的最小单位
(2)一个进程由一个或多个线程组成,线程是一个进程中代码的不行执行路线。
(3)进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其他进程内不可见
(4)调度和切换:线程的上下文切换比进程上下文切换要快的多。

2.协程
是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己写程序来管理的轻量级线程叫做用户空间线程,具有对内核不可见的特性。

传统的应用中,都是一个请求占用一个线程去完成相关的业务逻辑。所以系统的吞吐能力取决于每个线程的操作耗时。如遇到很耗时的I/0行为,则整个系统的吞吐量立刻下降,因为此时线程处于阻塞状态,如果线程很多的时候,会有很多线程处于空闲状态,造成资源浪费。
协程的目的就是当出现长时间的I/O操作时,通过让出目前的协程调度,执行下一个任务的方式,来消除上下文切换的开销。

  1. 协程的特点:
    (1)线程的切换由操作系统负责调度,协程由用户自己进行调度,因此减少了上下文切换,提高了效率。
    (2)线程默认stack大小为1M,而协程更轻量,接近1K。因此我们可以在相同的内存中开启更多的协程。
    (3)由于在同一个线程上,因此可以避免竞争关系而使用锁。适用于被阻塞的,需要大量并发的场景。不适应需要大量计算的多线程,这种情况更好使用线程去解决。

  2. 协程的原理
    当出现IO阻塞的时候,由协程的调度器进行调度,通过将数据流立即yield掉(主动让出),并且记录当前栈上的数据,阻塞完成后立刻再通过线程恢复栈,并把阻塞的结果放到这个线程上去跑,如golang里的go关键字其实就是开启一个fiber,让func逻辑跑在上面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我峰兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值