进程内消息队列(消息循环)我一般把它分两种:
- IO类,主循环是epoll/select,处理IO事件。典型的例子是Glib的mainloop
- 自定义消息类,主循环处理自定义消息,一般在等待一个condition variable;以上层逻辑为主。典型的例子是WinMain、安卓应用的主线程的HanlerLooper
这两种消息循环都可以往里面扔lambda或者std::function形式的回调函数,往IO类里扔的时候一般会封一个timerfd支持延迟回调或立即回调两种。
还有一种设计思想,是把这两种消息循环统一成epoll,那就要把condition variable变成文件描述符,可以用考虑用eventfd。不过我还是更倾向于各干各的。
跨进程的,比如binder或DBus或socket,在进程内部就是一个IO类消息循环,拿到数据后丢消息到自定义消息循环。
具体实现的话,chrome里有MessageLoopForUI/MessageLoopForIO/MessageLoop可以参考。可以按照需求做些修改
【 在 z16166 的大作中提到: 】
: 1、至少支持进程内的。烦了“线程间直接加锁然后互相call来call去的”这种模式了。类似Rust那种SPSC、MPSC的,或者进程内消息队列也行。
: chrome的?
: 2、能同时也支持同一台机器的进程间最好,不支持也行。不需要跨机器。
: ...................
--
FROM 111.198.228.*