libevent 多线程相关
什么时候调用evthread_use_pthreads函数?
如果要使用多线程,需要线程安全,那么在调用event_base_new函数之前一定要调用该函数(对应的Windows版本为evthread_use_windows_threads)。如果在event_base_new之后才调用evthread_use_pthreads,那么该event_base就不会是线程安全的了。
bufferevent线程安全吗?
你在调用bufferevent_socket_new的时候加入了BEV_OPT_THREADSAFE选项,那么就线程安全了。
bufferevent_write是非阻塞的吗?
是非阻塞的。调用后,不会被阻塞,能马上返回。
次线程调用bufferevent_write,为什么不能发送数据?
此种情况,一般是主线程在event_base_dispatch中运行。用户想在次线程中调用bufferevent_write发送数据。首先,确保你已经调用了evthread_use_pthreads函数(Windows平台为evthread_use_windows_threads函数)。其次,确保你在是event_base_new函数之前调用的。
在Linux中,编译Libevent,会产生下面这个静态库libevent.a、libevent_core.a、libevent_extra.a、libevent_pthreads.a
这四个静态库的区别是:
event_core.a: 包含Libevent的核心内容。比如event、buffer、bufferevent、log、epoll、evthread
event_extra.a: 包含Libevent额外提供的四大功能,为:event_tagging、http、dns、rpc
event_pthreads.a: 包含了pthreads线程的具体实现
event.a: event.a = event_core + event_extra