https://www.aaronraff.dev/blog/an-introduction-to-producing-and-consuming-kafka-messages-in-go https://github.com/aaronraff/blog-code/tree/master/an-introduction-to-producing-and-consuming-kafka-messages-in-go https://github.com/felixge/fgprof https://medium.com/@rocketlaunchr.cloud/how-to-benchmark-dbq-vs-sqlx-vs-gorm-e814caacecb5
CGI:即通用网关接口,是一种协议,定义了web服务器和应用程序交互数据的基本格式。例如一个请求发送到nginx后,nginx应该按照CGI协议将请求按照规定的格式处理好后(标准的请求头信息,查询字符串,请求路径等等),然后启用相应的应用程序解析器(php就是php解释器,python就是python解释器),然后把数据传输给解析器,这个时候解析器就可以定位到我们编写的处理代码对请求进行处理,处理完以后按照CGI协议规定的数据格式将结果返回给web服务器,最后退出进程。 fastcgi:fastcgi可以看作是cgi协议的改良版,cgi是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而fastcgi则是通过master-woker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master从worker进程中选择一个去处理请求,这样就避免了重复的开启和结束进程带来频繁cpu上下文切换而导致耗时。所以fastcgi也是一种规定了如何实现web服务器和应用程序通信的协议,但是比cgi协议更先进。 通过cgi实现 用户请求http://www.baidu.com?key=码农&platform=linux。 省略一系列DNS解析然后将数据传输到nginx监听的端口上。 nginx根据配置文件判断该请求是否是静态文件,是的话直接从文件系统读取返回给浏览器。不是的话将接收到的数据进行处理(按照CGI或者fastcgi协议规定的格式),提取出请求头,请求参数,资源路径等信息。 nginx通过配置文件启动一个cgi程序,例如php_cgi,由于php_cgi程序是实现了cgi协议的,所以它能够识别出nginx传过来的数据,然后去执行相应的php文件。 php_cgi将执行后的结果返回给nginx,然后进程退出。 nginx将获得的结果按照http协议规范处理后返回给浏览器。 通过fastcgi实现 Web Server启动时载入FastCGI进程管理器(IIS ISAPI,Apache Module或者php-fpm) FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi)并等待WebServer的连接。 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。
CG的含义是 compiler_globals。Zend编译器相关的全局变量。 EG的含义是 executor_globals。Zend执行器相关的全局变量。 EG和CG有一些数据是共用的。如,function_table (存储方法信息) , class_table (存储类信息) 。
1、命令格式: ss [参数] ss [参数] [过滤] 2、命令功能: ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。 3、命令参数: -h, –help 帮助信息 -V, –version 程序版本信息 -n, –numeric 不解析服务名称 -r, –resolve 解析主机名 -a, –all 显示所有套接字(sockets) -l, –listening 显示监听状态的套接字(sockets) -o, –options 显示计时器信息 -e, –extended 显示详细的套接字(sockets)信息 -m, –memory 显示套接字(socket)的内存使用情况 -p, –processes 显示使用套接字(socket)的进程 -i, –info 显示 TCP内部信息 -s, –summary 显示套接字(socket)使用概况 -4, –ipv4 仅显示IPv4的套接字(sockets) -6, –ipv6 仅显示IPv6的套接字(sockets) -0, –packet 显示 PACKET 套接字(socket) -t, –tcp 仅显示 TCP套接字(sockets) -u, –udp 仅显示 UCP套接字(sockets) -d, –dccp 仅显示 DCCP套接字(sockets) -w, –raw 仅显示 RAW套接字(sockets) -x, –unix 仅显示 Unix套接字(sockets) -f, –family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink -A, –query=QUERY, –socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY] -D, –diag=FILE 将原始TCP套接字(sockets)信息转储到文件 -F, –filter=FILE 从文件中都去过滤器信息 FILTER := [ state TCP-STATE ] [ EXPRESSION ] 4、使用实例: