进程、线程、协程

进程,线程,协程对比

1.进程是资源分配的单位
2.线程是操作系统调度的单位
3.进程切换需要的资源最大,效率低
4.线程切换需要的资源一般,效率一般
5.协程切换任务资源很小,效率高
6.多进程,多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中,所以是并发

协程(coroutines),是一种比线程(线程的上下文切换?)更加轻量级的存在
正如一个进程可以拥有多个线程一样,
一个线程也可以拥有多个协程

最重要的是,协程不是被操作系统内核所管理,
而完全是由程序所控制(yeild)(也就是在用户态执行),
(yield 是python当中的语法。当协程执行到yield关键字时,
会暂停在那一行,等到主线程调用send方法发送了数据,
协程才会接到数据继续执行,但是,yield让协程暂停,
和线程的阻塞是有本质区别的。协程的暂停完全由程序控制,
线程的阻塞状态是由操作系统内核来进行切换)
这样带来的好处就是性能得到了很大的提升,
不会像线程切换那样消耗资源

有哪些编程语言应用到了协程呢?我们举几个栗子:
Lua语言
Lua从5.0版本开始使用协程,通过扩展库coroutine来实现。

Python语言
正如刚才所写的代码示例,python可以通过 yield/send
的方式实现协程。

Go语言
Go语言对协程的实现非常强大而简洁,
可以轻松创建成百上千个协程并发执行。

Java语言
如上文所说,Java语言并没有对协程的原生支持,
但是某些开源框架模拟出了协程的功能,有兴趣的小伙伴可以看一看Kilim框架的源码:
https://github.com/kilim/kilim

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值