在nginx里面,定义了一个spinlock,来同步父子进程间的共享内存操作
#define ngx_shmtx_lock(mtx) ngx_spinlock((mtx)->lock, ngx_pid, 1024)
void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin)
{
#if (NGX_HAVE_ATOMIC_OPS)
ngx_uint_t i, n;
for ( ;; ) {
//__sync_bool_compare_and_swap(lock, old, set)
//这是原子操作
//尝试把lock的值设置成value,如果不为0就说明已经有其他进程获取了该锁
if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
//获取锁成功
return;
}
if (ngx_ncpu > 1) {
//spin=1024,每次shift一位
for (n = 1; n < spin; n <<= 1) {
//n=1,2,4,8,16,32,64,128 ...
//每次等待时间增加一倍
for (i = 0; i < n; i++) {
//__asm__(".byte 0xf3, 0x90")
//__asm__("pause")
//等待一段时间
ngx_cpu_pause();
}
//等待一段时间再去尝试获取锁
if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
//获取锁成功
return;
}
}
}
//试了这么多次,还是没有获取锁,那就休息一下吧
//sched_yield()
//usleep(1)
ngx_sched_yield();
}
#else
#if (NGX_THREADS)
#error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !
#endif
#endif
}
分享到:
相关推荐
nginx 离线安装包nginx 离线安装包
nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源
3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf;(就是加载刚刚新建的那个文件(注意路径)) 4.进入cmd 进入D盘: d: 进到nginx文件夹下:cd nginx 启动nginx.exe:...
Nginx 1.22.0 Linux 版本,解压安装。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型...
nginx替代apache,nginx替代方案,nginx代替apache与jbos,nginx+jboss结合
亲测好用.nginx-1.13.3,nginx1.13.3不存在信息泄漏漏洞安全稳定nginx版本,不存在漏洞 nginx-1.13.3 nginx1.13.3 安全稳定 nginx版本
nginx采用多进程的模,当一个请求过来的时候,系统会对进程进行加锁操作,保证只有一个进程来接受请求。 本文基于Nginx 0.8.55源代码,并基于epoll机制分析 1. accept锁的实现 1.1 accpet锁是个什么东西 提到accept...
Nginx安装包Nginx安装包
Nginx全能指南是一本介绍Nginx服务器的书,首先,简要介绍Nginx的基本概念和作用,如反向代理、负载均衡等。然后,列举Nginx的优点,如高性能、可扩展性、稳定性等。接着,介绍如何安装和配置Nginx,并提供一些实用...
nginx.conf nginx-1.20.1.tar.gz 这是关于centos8的nginx 和nginx 的配置https文件
此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...
nginx安装环境及nginx_1.18.0安装包,gcc、g++、pcre、zlib、nginx包
nginx/Windows-1.23.1 Nginx(发音为“engine X”[9] /ˌɛndʒɪnˈɛks/ EN-jin-EKS),风格化为NGIИX,是一个Web服务器,也可以用作反向代理,负载平衡器,邮件代理和HTTP缓存。该软件由Igor Sysoev创建,并于...
Nginx官网配置.pdf Nginx基本配置.pdf Nginx模块.pdf Nginx指南.pdf 第1章 Nginx简介.pdf 第2章 Nginx服务器的安装与配置.pdf 第3章 Nginx的基本配置与优化.pdf 第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf 第...
官方nginx 镜像不带主动健康,本镜像将 nginx_upstream_check健康检查 打包到了镜像中。
nginx命令参数用法详细介绍 nginx命令:启动nginx 在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 C:/nginx-0.8.53>nginx.exe 或者 C:/nginx-0.8.53>start ...
nginx1.21.5 nginx.conf配置文件
实战nginx.pdf。主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;第4章Nginx与PHP;第5章Nginx与JSP、ASP.NET..第6章Nginx http负载均衡和反向代理;第7章Nginx 的rewrite...
书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识...