MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
简单线程池模型。使用了模拟Java线程池接口的线程池,所以脚JavaThreadPool 更多...
#include <java_thread_pool_thread_handler.h>
Public 成员函数 | |
virtual RC | start () override |
启动线程模型 更多... | |
virtual RC | stop () override |
停止线程模型 更多... | |
virtual RC | await_stop () override |
等待线程模型停止 更多... | |
virtual RC | new_connection (Communicator *communicator) override |
有新的连接到达时,调用此接口 更多... | |
virtual RC | close_connection (Communicator *communicator) override |
连接断开时,调用此接口。通常都是内部调用 更多... | |
void | handle_event (EventCallbackAg *ag) |
使用libevent处理消息时,需要有一个回调函数,这里就相当于libevent的回调函数 更多... | |
void | event_loop_thread () |
libevent监听连接消息事件的回调函数 更多... | |
virtual RC | start ()=0 |
启动线程模型 更多... | |
virtual RC | stop ()=0 |
停止线程模型 更多... | |
virtual RC | await_stop ()=0 |
等待线程模型停止 更多... | |
virtual RC | new_connection (Communicator *communicator)=0 |
有新的连接到达时,调用此接口 更多... | |
virtual RC | close_connection (Communicator *communicator)=0 |
连接断开时,调用此接口。通常都是内部调用 更多... | |
Private 属性 | |
mutex | lock_ |
struct event_base * | event_base_ = nullptr |
common::ThreadPoolExecutor | executor_ |
libevent 的event_base | |
map< Communicator *, EventCallbackAg * > | event_map_ |
线程池 | |
SqlTaskHandler | sql_task_handler_ |
每个连接与它关联的数据 | |
额外继承的成员函数 | |
![]() | |
static ThreadHandler * | create (const char *name) |
创建一个线程模型 | |
简单线程池模型。使用了模拟Java线程池接口的线程池,所以脚JavaThreadPool
使用线程池处理连接上的消息。使用libevent监听连接事件。 libevent 是一个常用并且高效的异步事件消息库,可以阅读手册了解更多。 libevent 手册
|
overridevirtual |
等待线程模型停止
实现了 ThreadHandler.
|
overridevirtual |
void JavaThreadPoolThreadHandler::event_loop_thread | ( | ) |
libevent监听连接消息事件的回调函数
这个函数会长时间运行在线程中,并占用线程池中的一个线程
void JavaThreadPoolThreadHandler::handle_event | ( | EventCallbackAg * | ag | ) |
使用libevent处理消息时,需要有一个回调函数,这里就相当于libevent的回调函数
ag | 处理消息回调时的参数,比如libevent的event、连接等 |
|
overridevirtual |
有新的连接到达时,调用此接口
communicator | 与客户端通讯的对象 |
创建一个libevent事件对象。其中EV_READ表示可读事件,就是客户端发消息时会触发事件。 EV_ET 表示边缘触发,有消息时只会触发一次,不会重复触发。这个标识在Linux平台上是支持的,但是有些平台不支持。 使用EV_ET边缘触发时需要注意一个问题,就是每次一定要把客户端发来的消息都读取完,直到read返回EAGAIN为止。 我们这里不使用边缘触发。 注意这里没有加 EV_PERSIST,表示事件触发后会自动从event_base中删除,需要自己再手动加上这个标识。这是有必 要的,因为客户端发出一个请求后,我们再返回客户端消息之前,不再希望接收新的消息。
实现了 ThreadHandler.
|
overridevirtual |
启动线程模型
实现了 ThreadHandler.
|
overridevirtual |
停止线程模型
实现了 ThreadHandler.