大神们,一直有个疑惑,swoole的异步指的是什么?解决的什么需求或者应用场景是什么?swoole的mysql异步的应用场景是什么?

了解AJAX的运行机制,利用JS的xmlhttprequest对象可以向服务器端发起请求,完成页面局部更新,且JS运行时不用等待服务器端的响应,继续执行。 PHP的异步就我了解的主要应用在后台执行任务脚本,如消息队列(邮件队列、日志队列、大量请求的入库队列),在用户发起请求之后,并没有立即执行完成,而是通过队列的消息生产者-消费者模式,完成最终的任务。 那swoole这个异步是什么?mysql异步又是什么呢?

2014-04-10 13:17
0

最佳回复

5

韩天峰 - 关注外星人

赞同来自: xudianyang xuxu2009 昌维 sakura2004 shijinzhan更多 »

此异步非彼异步。这里的异步,实际上说的异步非阻塞IO,比较底层。比如PHP的fread函数,读取磁盘或者读取网络,会有一个等待时间。比如磁盘读取最慢可能需要10ms以上,网路的话内网大致1ms,外网就上100ms都有可能。

而且你的PHP代码在这个事件里不能做任何事情,只能等fread返回数据。无法高效利用机器资源。为了解决并发的问题,只能多开进程,比如php-fpm经常开到几百个工作进程。但进程开得越多,系统资源争抢就越严重。如果开得工作进程很多,有可能光进程间竞争资源的开销,就浪费掉了大量的CPU资源。

swoole异步就是为了解决这个问题,当你的程序读取网络或磁盘时。swoole会加入到事件监听中,完全不需要等待,你的代码可以取做别的事情。当网络或磁盘读取完成,返回数据时,再继续向下执行你的代码。这样就可以高效利用机器资源。再高的并发也不是问题。

2014-04-10 13:51
1

reallovelei - Swoole管理员

赞同来自: 昌维

那如果 你后面的代码是依赖于你的这个 网络资源的呢?

2014-09-13 16:23
0

韩天峰 - 关注外星人

赞同来自:

所以要用嵌套回调才能解决

2016-01-18 09:10
0

peng_coder

赞同来自:

前两天,看了node.js 。思路是一样的。不过这个,直接支持php, 多余phper 来说,是个福利。

2016-04-18 09:47
0

lant - 90后IT男人

赞同来自:

epoll本身是同步的 swoole是如何

2017-08-01 15:55

要回复问题请先登录注册