获取进程ip(如何通过运行查看ip)
时间:2023-10-28 17:44:07 浏览量:35
一、线程锁
a) 互斥锁
b) 自旋锁
c) 读写锁
d) 条件变量
e) 信号量
f) 原子锁
扩展:互斥锁和自旋锁可以同时使用
1. 自旋锁 时间 500ms 衰减因子 88888 -1
2. 改用互斥锁
文章福利: 现在C 程序员面临的竞争压力越来越大。那么,作为一名C 程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,或者说一名优秀的高级工程师或架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员,也是工作三五年之后开始迷茫的老程序员,都必须要面对和想明白的问题。为了帮助大家少走弯路, 技术要做到知其然还要知其所以然。 以下视频私信
如果想学习C 工程化、高性能及分布式、深入浅出。性能调优、TCP,协程,Nginx源码分析Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,Linux内核,P2P,K8S,Docker,TCP/IP,协程,DPDK的朋友可以关注我
一个机器中的进程间竞争资源的锁。nginx
ngx_shmtx_t 来解决进程间竞争资源的问题 accept
if ngx_have_atomic_ops
if ngx_have_posix_sem
自旋锁 互斥锁
else
自旋锁
endif
else
文件锁 fcntl(int fd, int cmd, struct *flock *lock) 系统是用来实现的
f_setlk f_setlkw
ngx_fd_t fd;
uchar *name;
endif
nginx 进程锁有三种方式的实现:
1. 只支持原子操作 自旋锁 大量并发请求 修改参数 只支持
spin = 40亿
2. 既支持原子操作又支持信号量,自旋锁 互斥锁
3. 文件锁
ngx_shmtx_t 存储在共享内存中
redis 实现的方案 数据库 zookeeper
lock(mutex);
获得操作权;
unlock(mutex);
redis
redis如何实现分布式锁:
方案1:
获取锁: set(“lock”, 1, nx ) setnx(“lock”, 1)
释放锁: del(“lock”)
问题: a. 如果a进程挂了,变成死锁 b. 谁都可以释放锁
需要确定当前谁获取了锁
在分布式系统中 怎么区分不同的进程?
pid --- pid 依次累加的 几天了 批处理 1. 重复 2. pid cat /proc/1024/status 可以查询 内存以及cpu使用 coredump
ip:port
ip:port:pid:starttime 四元组来唯一标识进程
方案2:
获取锁:set(“lock”, 进程四元组,nx, ex, 30);
释放锁:if get(“lock”) == 进程四元组 redis的lua事务 mysql 存储过程一样
del(“lock”)
问题: a.如果a操作临界资源的时间超过30秒
加一个线程:续时间
b. b,c,d进程怎么去查询锁?第一种 定时30轮询 尝试获取锁 第二种:监听发布机制 key超时机制 (新的与redis的连接) 解决方案:第一种
c. 公平锁 按照我们获取锁的顺序 获取锁
关注我每日更新C/C 服务器高级架构学习笔记!