人大金仓KingbaseLAC线程模型设计文档
License、LAC、多线程、人大金仓、KingbaseES。
KingbaseLA线程模型设计文档
关键字:
License、LAC、多线程、人大金仓、KingbaseES
功能和作用
LAC线程模块是LAC服务端使用多个工作线程来处理监听模块接收到的客户端连接。作用是:
可以实现并发处理多个客户端请求,提高LAC服务的响应速度和吞吐量。
可以异步处理生产者线程(监听线程)的任务,避免阻塞于I/O操作,提高CPU的利用率。
复用线程资源,减少线程创建和销毁的开销,提高服务器的性能和效率。
相关参数
最大线程数 | 64 |
默认线程数 | 8 |
配置文件名 | lacd.conf |
线程数量配置变量 | max_workers |
队列容量 | 4096 |
运行架构
监听线程(主线程)在accept监听到的客户端连接之后,将对应的套接字放入一个队列中。各个工作线程通过while循环不断尝试从队列中dequeue到一个待处理的套接字,进而对相应的客户端请求做出处理,完成后释放套接字,继续尝试从队列中获取新的套接字。队列在enqueue和dequeue时都有锁保护整个队列。
逻辑架构
在启动lac_server程序后,由主线程进行监听、接受客户端连接,另外启动n个工作线程来处理接收到的客户端连接,n可以在[1-64]范围内任意取值,在配置文件中修改,默认为8。监听线程和工作线程共同构成生产者-消费者模式:监听线程是生产者,不断将连接上来的客户端socket放入队列中;工作线程是消费者,相互竞争,同时尝试从队列中获取客户端socket,如果获取客户端socket成功,则处理对应客户端的请求,如果获取失败(队空),则短暂的阻塞后重新尝试获取。队列有锁保护,同一时间只能有一个工作线程、或者监听线程(主线程)对队列进行读、写操作。
错误处理
队列有最大容量限制,在队列满后,有新的连接时,不入队,直接返回,等待其超时。
工作线程处理完成或者遇到错误时,不退出,释放当前套接字后继续从队列中获取新的套接字。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)