您的位置:首页 > 编程语言 > Python开发

python基础--进程,线程,协程对比

2018-12-11 23:01 387 查看

进程,线程,协程对比
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: