C++ 14我想建立一个机制,以“顺序”方式使用异步API,使用单线程。如何使C++异步编程更线性(协程?)
更明确,我想才达到这样的事:
// Transform AsyncOp1 into SyncOp1
// SyncOp1 returns after AsyncOp1 completes
// but yields execution to another script
void SyncOp1()
{
AsyncOp1([](){ // async op completion handler
// TODO: yield control
});
// TODO: control returns here after AsyncOp1 completed
}
... // similar code for SyncOp2, SyncOp3, SyncOp4,...
void Script1()
{
SyncOp1();
SyncOp2(); // SyncOp2 starts only after AsyncOp1 has completed
...
}
void Script2()
{
SyncOp3();
SyncOp4(); // SyncOp4 starts only after AsyncOp3 has completed
...
}
int main()
{
...
Spawn(Script1);
Spawn(Script2); // Script1 and Script2 runs in parallel
...
// TODO some machinery here :-)
...
return 0;
}
我的程序应该同时运行多个脚本,每个脚本应该是标准的函数调用(SyncOpX
)的序列。因为SyncOpX
在的异步函数(即,函数,启动I/O操作,返回,并调用回调的I/O完成时)方面实现的脚本可以并行运行。
当然,很容易找到使用多线程的解决方案(Spawn
创建新线程,SynchOpX
等待异步调用的结果)。但是我正在寻找一个单线程的解决方案,来代替。
我认为协程可能以某种方式使用。由于目前的标准是C++14
,有没有与boost coroutines
一个解决方案吗?或者与其他[便携式]机制?
BTW:我使用boost::asio
用于异步I/O。
谢谢。
您是否正在考虑使用像[libuv]库(https://github.com/libuv/libuv)或[libevent的(http://libevent.org/)? – j2ko
@ j2ko我已经使用boost :: ASIO的I/O异步事件。我正在寻找的是一种使异步编程更顺序(无线程)的C++机制。 –