2020-08-20:GO语言中的协程与Python中的协程的区别?

Python09

2020-08-20:GO语言中的协程与Python中的协程的区别?,第1张

福哥答案2020-08-20:

1.golang的协程是基于gpm机制,是可以多核多线程的。Python的协程是eventloop模型(IO多路复用技术)实现,协程是严格的 1:N 关系,也就是一个线程对应了多个协程。虽然可以实现异步I/O,但是不能有效利用多核(GIL)。

2.golang用go func。python用import asyncio,async/await表达式。

评论

用于让出CPU时间片。让别的先执行,执行完再回来执行它 。

终止当前协程 ,而其它的goroutine并不会受此影响。runtime.Goexit在终止当前goroutine前会先执行此goroutine的还未执行的defer语句。请注意千万别在主函数调用runtime.Goexit,因为会引发panic。

用来设置可以并行计算的CPU核数最大值,并返回之前的值。

首先协程是什么就不多做解释了,看到这里的同学,我想至少对协程已经有了理解。

现在很多phper转go开发,大部分都是冲着go的静态语言和协程去的,当然还有钱多。

但是php自己其实也有协程支持,那就是 swoole 了。

工作原因,有幸接触了一段时间swoole和go,希望对比下两者的区别。

首先,网上很多大神关于swoole和go的对比,有的还是比较详细的。

比如swoole官方就有一个对比swoole和go的文章: https://wiki.swoole.com/wiki/diff/?id=1018&version=1&compare=current

知乎大神文章: https://zhuanlan.zhihu.com/p/93141701

感兴趣的话,可以 拜读一下。

文章基本是围绕,swoole是单进程协程切换,go是MGP模型切换。

swoole 的单进程模型 不能共享资源,没有线程并发问题,协程切换依赖io等等。

对比下来,基本都是go性能比较突出。

确实,go的性能比php高出不少,但同时也比php的学习和使用成本高很多。而且,目前go的开发框架大都是基于beego或者gin,说好用真实有点昧良心,相比之下基于swoole的hyperf、mix-php都是开箱即用,包含了大部分需要的功能,二开也成本不高。

总的来说,go的性能确实比php要高,但是使用成本也高出不少,同时由于静态语言天然的特性,比php这种弱类型语言在开发时的成本也要高出不少。

基于协程的框架,抗并发性能基本都没大问题,如果后端存储能撑得住,server端的并发基本不会有问题。

swoole直播案例