Lua是一门动态类型的语言,这意味着Lua中的变量没有类型,而值才有类型。一个变量可以在不同时刻指向不同类型的值。下面将对Lua中的值及其类型做一些总结。
epoll的原理和实现
epoll是Linux内核为处理大批量文件描述符而设计的IO多路复用机制,它能显著提高程序在存在大量并发连接而只有少部分活跃连接情况下的系统CPU利用率。epoll之所以可以做到如此高的效率是因为它在获取就绪事件的时候,并不会遍历所有被监听的文件描述符集,而只会遍历那些被设备IO事件异步唤醒而加入就绪链表的文件描述符集。
Linux中rps/rfs的原理及实现
rps的全称是Receive Package Steering,rfs的全称是Receive Flow Steering,rps和rfs是google的工程师提供的两个补丁,用以在软件层面实现报文在多个cpu之间的负载均衡以及提高报文处理的缓存命中率。rps和rfs出现的原因主要有以下两个:
1、 对于多队列网卡,网卡硬件接收队列与cpu核数在数量上不匹配导致报文在cpu之间分配不均。
2、 对于单队列网卡,rps和rfs可以在软件层面将报文平均分配到多个cpu上。
基于82599网卡的二层网络数据包发送
这篇文档主要介绍了网络数据包在二层的发送流程。网络数据包在二层的发送主要包括了网络设备层和驱动层两个部分,所以下面将会从这两个方面讲述报文在二层的发送流程。
基于82599网卡的二层网络数据包接收
本篇文档主要描述了网络数据包在二层的接收流程,主要包括以下三个部分:
1)、82599网卡和数据包接收相关的内容;
2)、ixgbe网卡驱动数据包接收相关的配置;
3)、ixgbe网卡驱动napi接口的处理。
客户端非阻塞socket建链流程
TCP协议是面向连接的、可靠的、基于字节流的传输层协议。那使用tcp协议进行通信的两端是如何进行通信的?使用tcp协议进行通信的两端是通过套接字(scoket)来建立连接的。套接字socket主要有两种类型,阻塞和非阻塞。通常为了防止进程阻塞以及避免cpu被长时间占用,客户端和服务端一般都会采用非阻塞socket进行通信,其中Nginx就是一个典型的例子。下面我们就以Nginx的upstream机制所涉及的与后端服务器建链的流程来总结下使用非阻塞socket的客户端建链流程。
ngx_stream_limit_conn_module模块解析
ngx_stream_limit_conn_module模块在stream子系统中是用来限制某个ip的并发连接数的。
ngx_stream_access_module模块解析
ngx_stream_access_module模块在stream子系统中是用来实现对某个ip访问控制功能。在stream子系统中,虽然没有像http子系统那样在代码中明确地定义处理阶段,但是其处理流程也是按照一定的阶段来划分的,stream处理阶段包括:Post-accept、Pre-access、Access、SSL、Preread、Content、Log。