会点 Python
的协程,最近在学习 golang
。
协程又是 golang
的招牌,想知道 golang
的协程和 Python
的协程有什么区别?
会点 Python
的协程,最近在学习 golang
。
协程又是 golang
的招牌,想知道 golang
的协程和 Python
的协程有什么区别?
本质上都是有一个线程进行task循环监听状态里面每个携程函数
这是go 说明 https://github.com/LeoYang90/...
python的async在知乎有一篇很深邃的解释
这个视频也很通透适合入门 https://www.bilibili.com/vide...
我个人
感觉go里面的go关键字协程更像python的进程表现
python:
go:
go关键字函数直接进入task,控制权直接被交出了但是携程里面的程序却还在执行,明面很像python里面进程,具体里面的细节我也不太懂,go的协程被封装的太好了不需要关注调用关系问题
总之协程在很多语言都有,特性都差不多,不然为什么叫协程呢
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
从概念上来讲,不管任何语言,在实现协程的时候都是一样的,否则就不叫协程了。所谓协程,就是指在运行这个协程的时候是非阻塞性的,非独占性的,在同一个CPU上它也依然会将时间片划出来给其它协程使用。那么唯一的区别就是写法上的不同,比如Go语言里最简单的协程:
在python里写起来可能就是这样:
区别在于Go语言的协程是语言级别的,也就是说你不用安装任何库就可以使用
go
来启动一个协程,而Python的协程你需要先引入一下asyncio
这个库然后才能使用。不过我觉得这个问题并不关键,无非就是把协程这个概念是包在了语言当中还是放在了库里而已,并不值得Go粉们大吹特吹。那我是不是还可以说Python也内置了很多函数,不像Java还需要显式声明很多包呢?所以我们学语言学的只是一种表达方式,不同的语言有不同的表达方式,但最重要的其实是概念本身,就像不管你是中文还是英文,语法并不重要,重要的是语法所传达的思想。