学习swoole,把文档看完了,也从GitHub上找了几个源码。
看完之后有几点疑惑请教一下大家。
目前我所知的异步操作主要分几块。
1、开一个process进程
2、回调中使用Coroutine
3、丢到task进程中
这几种都可以进行异步操作,那为什么要分出这么多操作方式来。每一种的具体应用场景是怎么样的?
另外,php是单线程,进程的执行顺序又是串行的。是不是意味着所谓的异步其实还是在顺序执行?
请教一下大家,谢谢。
学习swoole,把文档看完了,也从GitHub上找了几个源码。
看完之后有几点疑惑请教一下大家。
目前我所知的异步操作主要分几块。
1、开一个process进程
2、回调中使用Coroutine
3、丢到task进程中
这几种都可以进行异步操作,那为什么要分出这么多操作方式来。每一种的具体应用场景是怎么样的?
另外,php是单线程,进程的执行顺序又是串行的。是不是意味着所谓的异步其实还是在顺序执行?
请教一下大家,谢谢。
从 cpu 角度看问题,如果你是多核处理器,举个例子,假设你的worker进程使用cpu0,那同时 process、task 在不同进程中执行可能会用cpu1。
而如果用Coroutine,你的代码永远只会单核按顺序执行,差别就是不会阻塞进程
可以看一下这篇:https://my.oschina.net/yurun/...
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
795 阅读
644 阅读
重新看了一下文档。task是真的异步非阻塞的,丢到task里面,recv去接收就行了。
coroutine是阻塞的。结果要等执行最长的协程完成后,程序才会继续往下执行,区别在于加快了程序的执行速度。
process确实到现在还不明白具体的应用场景是什么