Boost.Fiber是否自动屈服于网络请求(如果我理解他们在I / O期间产生CPU),例如通过网络进行数据库调用?我想用它来设置阻塞数据库调用,我在这里插入大量信息,并且在收到它们时需要插入许多小记录。我的另一个选择是用于微线程的libdill / libmill。
一般的想法是:
纤维是否像我设想的那样以这种方式工作?
这是使用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();
答案 0 :(得分:1)
Boost.Fiber是否自动在网络请求上产生(如果我理解它们在I / O期间产生CPU),例如通过网络进行数据库调用?
不,他们没有。
你似乎正在寻找的是Boost Coroutines,结合Boost Asio用于异步IO。他们将屈服。
有利用Asio进行异步执行的数据库操作库(例如Amy)或WebSockets(例如Boost Beast)
答案 1 :(得分:0)
boost.fiber确实与boost.asio集成 - 你需要install a special scheduler - 在boost.fiber /子目录示例中提供了示例。)
public interface Foo {
default int getValue() {
return 1;
}
}
public interface Bar {
default int getValue() {
return 2;
}
}
public class Impl implements Foo, Bar {
@Override
public int getValue() {
return Bar.super.getValue();
}
}