这样理解 Beego 和 PHP 框架的一个不同点对不对?
PHP 是每次请求从入口文件执行,响应返回后就结束了一次生命周期,而 Beego 是常驻运行的,因此它们有一个很大的不同,就是 beego 里可以很容易进行异步的处理。
比如一个请求,中间有四个逻辑,其中第二个逻辑就可以返回数据了,如果是 PHP ,通常要同步的执行完后面的步骤再返回数据(假如不用消息队列异步处理),而 beego 里,可以使用 go 关键字异步执行后面的逻辑,这样响应上 beego 会快一点?
是不是这样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的理解大体正确。
有一些细节:
1) PHP/PHP-FPM是多进程模式。 每个进程在同一时刻只能处理一个客户端请求。但服务器可以同时开几十上百个PHP-FPM进程,这样能同时处理多个请求。 这些请求涉及到IO操作(读写数据库,curl请求其它接口等)时,会导致当前进程阻塞,操作系统会让出CPU给其它进程。
2) GO是(多线程/协程) +管道+ 多路复用模式。 协程可以共享进程内的数据。占内存极少。从CPU调度上看,和进程类似。多路复用进一步提高了IO的效率。GO协程搭配管道简化了并发编程。
GO比PHP容易优化在于:1,GO可以方便实现单服务器全局缓存 2,在一次请求内,可以根据需要开多个协程并发处理子任务。 3, GO的内存开销更少。
表面上是这样吧~
【通常要同步的执行完后面的步骤再返回数据(假如不用消息队列异步处理)】这句话不严谨~ 了解下ob_flash()
可以这么理解。PHP确实只能同步(排除pthread和开子进程情况)
golang在返回响应之后还是可以做其他事情的。用 go func 开新携程处理