Boost.Fiber 是否会在网络请求上自动产生(如果我理解正确的话,它们会在 I/O 期间产生 CPU),例如通过网络调用数据库?我想用它来设置阻塞数据库调用,我要插入大量信息并且有很多小记录需要在收到时插入。我的另一个选择是用于微线程的 libdill/libmill。
一般的想法是:
- 接收数据
- 创建光纤并将数据传递给它
- Fiber 获取数据库连接并发送 INSERT 查询(带有 postgres 的 libpqxx)
- 其他纤程运行并可在数据库查询运行时访问数据库
- 从数据库查询返回,进行错误处理和处理响应
纤维是否按照我的设想以这种方式工作?
这是使用 RapidJSON 和 boost.fiber 的代码的简化基本结构,但我从网络(websocket)获取消息:
inline
void doDatabaseCall( Document &msg ) {
//Get connection & do query with libpqxx
}
Document msg;
msg.Parse( "{\"myVar\": \"test\"}" );
Document msg2;
msg2.Parse( "{\"myVar\": \"test2\"}" );
boost::fibers::fiber f1( doDatabaseCall, msg);
boost::fibers::fiber f2( doDatabaseCall, msg2);
f1.join();
f2.join();