limit_rate_after nginx限速配置

Posted by 夏泽民

Nginx的http核心模块ngx_http_core_module中提供limit_rate这个指令可以用于控制速度,limit_rate_after用于设置http请求传输多少字节后开始限速。 另外两个模块ngx_http_limit_conn_module和ngx_http_limit_req_module分别用于连接数和连接频率的控制。



libevent

Posted by 夏泽民

libevent是一个事件通知库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue、IOCP等系统调用管理事件机制。著名分布式缓存软件memcached也是基于libevent,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。 libevent支持用户使用三种类型的事件,分别是网络IO、定时器、信号三种,最新版本在定时器的实现上使用了最小堆的数据结构,以达到高效查找、排序、删除定时器的目的,IO和信号的实现均使用了双向队列(用链表实现)。网络IO上,主要关注了一下linux上的epoll(因为目前的开发主要在linux平台),结果发现libevent的epoll居然用的EPOLLLT,水平触发的方式用起来比较方便,不容易出错,但是在效率上可能比EPOLLET要低一些。 libevent包括事件管理、缓存管理、DNS、HTTP、缓存事件几大部分。事件管理包括各种IO(socket)、定时器、信号等事件;缓存管理是指evbuffer功能;DNS是libevent提供的一个异步DNS查询功能;HTTP是libevent的一个轻量级http实现,包括服务器和客户端。libevent也支持ssl,这对于有安全需求的网络程序非常的重要,但是其支持不是很完善,比如http server的实现就不支持ssl。



爱拉托逊斯筛选法

Posted by 夏泽民

The Sieve of Eratosthees 爱拉托逊斯筛选法思想:对于不超过n的每个非负整数P,删除2P, 3P…,当处理 完所有数之后,还没有被删除的就是素数。 若用vis==1表示已被删除,则代码如下: memset(vis, 0, sizeof(vis)); for(int i = 2; i <= 100; i++) for(int j = i*2; j <= 100; j += i) vis[j] = 1; 改进的代码: int m = sqrt(double(n+0.5));



thread local storage Goroutine Local Storage

Posted by 夏泽民

每个线程除了共享进程的资源外还拥有各自的私有资源: 一个寄存器组(或者说是线程上下文);一个专属的堆栈;一个专属的消息队列;一个专属的Thread Local Storage(TLS);一个专属的结构化异常处理串链。



获取 goroutine id

Posted by 夏泽民

需要使用Go ID的场景, 比如在多goroutine长时间运行任务的时候,我们通过日志来跟踪任务的执行情况,可以通过go id来大致地跟踪程序并发执行的时候的状况。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required