PHP 是每次请求从入口文件执行,响应返回后就结束了一次生命周期,而 Beego 是常驻运行的,因此它们有一个很大的不同,就是 beego 里可以很容易进行异步的处理。
比如一个请求,中间有四个逻辑,其中第二个逻辑就可以返回数据了,如果是 PHP ,通常要同步的执行完后面的步骤再返回数据(假如不用消息队列异步处理),而 beego 里,可以使用 go 关键字异步执行后面的逻辑,这样响应上 beego 会快一点?
是不是这样。
PHP 是每次请求从入口文件执行,响应返回后就结束了一次生命周期,而 Beego 是常驻运行的,因此它们有一个很大的不同,就是 beego 里可以很容易进行异步的处理。
比如一个请求,中间有四个逻辑,其中第二个逻辑就可以返回数据了,如果是 PHP ,通常要同步的执行完后面的步骤再返回数据(假如不用消息队列异步处理),而 beego 里,可以使用 go 关键字异步执行后面的逻辑,这样响应上 beego 会快一点?
是不是这样。
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
2 回答1.1k 阅读
1 回答945 阅读
1 回答899 阅读
1 回答896 阅读
你的理解大体正确。
有一些细节:
1) PHP/PHP-FPM是多进程模式。 每个进程在同一时刻只能处理一个客户端请求。但服务器可以同时开几十上百个PHP-FPM进程,这样能同时处理多个请求。 这些请求涉及到IO操作(读写数据库,curl请求其它接口等)时,会导致当前进程阻塞,操作系统会让出CPU给其它进程。
2) GO是(多线程/协程) +管道+ 多路复用模式。 协程可以共享进程内的数据。占内存极少。从CPU调度上看,和进程类似。多路复用进一步提高了IO的效率。GO协程搭配管道简化了并发编程。
GO比PHP容易优化在于:1,GO可以方便实现单服务器全局缓存 2,在一次请求内,可以根据需要开多个协程并发处理子任务。 3, GO的内存开销更少。