Advertisement

20.Nginx自旋锁

阅读量:

在常规的阻塞锁机制中,当某个进程试图获取已被占用的锁时,该进程将被置于等待状态,并释放当前处理器资源。这种机制在多数场景下表现良好,然而当系统运行于多核架构且内核支持抢占式调度时,若锁的占用时间极为短暂,甚至短于内核执行进程调度所需的时间,则进入阻塞状态反而会带来额外的性能损耗。与此相对,通过持续检查锁的状态并在其未被占用时立即尝试获取的方式,往往能实现更高的效率。这种方法即为本次学习的重点——“自旋锁”。对于像Nginx这样对性能有极高要求的服务器软件而言,自旋锁的应用具有不可替代的重要性。Nginx通过调用sched_yield系统接口以及执行原子操作的方式,成功实现了自身的自旋锁机制。

复制代码
 /* os/unix/ngx_process.h */

    
  
    
 /* sched_yield系统调用:
    
  * 进程主动让出处理器, 并将自己投入等候调度队列队尾.
    
  * 成功返回0, 失败返回-1
    
  */
    
 #define ngx_sched_yield()  sched_yield()
    
  
    
  
    
 /* core/ngx_spinlock.c */
    
  
    
 /* 自旋锁
    
  * param lock: 锁指针
    
  *       spin: 

全部评论 (0)

还没有任何评论哟~