手写实现分布式锁

本文详细介绍了手写分布式锁的实现,从网络模块封装、协程调度、异步连接池到缓冲池设计和定时器设计。重点讨论了网络事件接口、协程如何提升并发性能以及异步连接池的作用。此外,还强调了拆分问题和测试能力在开发中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

分布式锁需要考虑很多事情,第一网络是否正常,第二个提供分布式锁这台机器的高可用性。

一、网络模块封装

明线

io检测部分的接口:

  • 添加读事件是因为当有客户端连接事件来临时,我们好去处理这个事件。

  • 写事件这是因为当我们服务端作为客户端去连接第三方服务时候,需要注册写事件。

  • 删除事件就比如关闭连接时,我们需要将事件从检测模块中删除。

  • 修改事件就比如当客户端发来事件我们需要检测读事件,但是接收失败了我们要把读事件修改为注册写事件进行反馈。

  • 检测事件肯定是必须的啦!io操作: 绑定监听,接收连接,建立连接,关闭fd,读,写,fd属性。

暗线

需要注意的是:fd类型中clientfd写事件触发的情况,服务器收到客户端的数据可以直接调用write()函数,只有当写入失败时才要注册写事件,检测何时可写。应该将发送失败的数据缓存起来,等事件可写了,再将缓冲区的数据进行发送。

断开连接或者错误,都是交给读写操作。

二、协程调度

没有协程之前,当成功接收到一个数据后,要调用多个回调函数,(解析数据、查库拿数据、返回给客户端)等等。现在我们考虑的是,将三个序列利用协程的方式进行粘合,三个回调变成一个协程回调执行序列。

为每一个fd执行一个序列,每个协程是一个执行序列。

lua虚拟机不支持协程,并且没有类似于pthread_create()函数,也就是说主协程被自动创建。lua虚拟机同时只能有一个协程在运行。主协程负责调度其他协程。

主协程会进行事件检测,不断地从epoll中去取事件,根据事件去唤醒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值