KingbaseLA线程模型设计文档

关键字:

License、LAC、多线程、人大金仓、KingbaseES

功能和作用

LAC线程模块是LAC服务端使用多个工作线程来处理监听模块接收到的客户端连接。作用是:

可以实现并发处理多个客户端请求,提高LAC服务的响应速度和吞吐量。

可以异步处理生产者线程(监听线程)的任务,避免阻塞于I/O操作,提高CPU的利用率。

复用线程资源,减少线程创建和销毁的开销,提高服务器的性能和效率。

相关参数

最大线程数

64

默认线程数

8

配置文件名

lacd.conf

线程数量配置变量

max_workers

队列容量

4096

运行架构

C:\Users\yugancheng\Desktop\LAC线程模型设计文档\运行架构.png

监听线程(主线程)在accept监听到的客户端连接之后,将对应的套接字放入一个队列中。各个工作线程通过while循环不断尝试从队列中dequeue到一个待处理的套接字,进而对相应的客户端请求做出处理,完成后释放套接字,继续尝试从队列中获取新的套接字。队列在enqueue和dequeue时都有锁保护整个队列。

逻辑架构

C:\Users\yugancheng\Desktop\LAC线程模型设计文档\逻辑架构.png

在启动lac_server程序后,由主线程进行监听、接受客户端连接,另外启动n个工作线程来处理接收到的客户端连接,n可以在[1-64]范围内任意取值,在配置文件中修改,默认为8。监听线程和工作线程共同构成生产者-消费者模式:监听线程是生产者,不断将连接上来的客户端socket放入队列中;工作线程是消费者,相互竞争,同时尝试从队列中获取客户端socket,如果获取客户端socket成功,则处理对应客户端的请求,如果获取失败(队空),则短暂的阻塞后重新尝试获取。队列有锁保护,同一时间只能有一个工作线程、或者监听线程(主线程)对队列进行读、写操作。

错误处理

队列有最大容量限制,在队列满后,有新的连接时,不入队,直接返回,等待其超时。

工作线程处理完成或者遇到错误时,不退出,释放当前套接字后继续从队列中获取新的套接字。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐