|
|
|
|
|
|
|
|
|
|
|
|
|
|
auto yield_switch(intptr_t coro) -> resumef::generator_t<intptr_t>
|
|
|
auto yield_switch(intptr_t coro) -> resumef::generator_t<intptr_t>
|
|
|
{
|
|
|
{
|
|
|
for (intptr_t i = 0; i < N / coro; ++i)
|
|
|
|
|
|
|
|
|
for (intptr_t i = N / coro; i > 0; --i)
|
|
|
co_yield i;
|
|
|
co_yield i;
|
|
|
co_return N / coro;
|
|
|
|
|
|
|
|
|
co_return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void resumable_switch(intptr_t coro, size_t idx)
|
|
|
void resumable_switch(intptr_t coro, size_t idx)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (intptr_t i = 0; i < coro; ++i)
|
|
|
for (intptr_t i = 0; i < coro; ++i)
|
|
|
{
|
|
|
{
|
|
|
//go yield_switch(coro);
|
|
|
|
|
|
go [=] ()->resumef::generator_t<intptr_t>
|
|
|
|
|
|
{
|
|
|
|
|
|
for (intptr_t i = 0; i < N / coro; ++i)
|
|
|
|
|
|
co_yield i;
|
|
|
|
|
|
co_return N / coro;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
go yield_switch(coro);
|
|
|
}
|
|
|
}
|
|
|
auto middle = std::chrono::steady_clock::now();
|
|
|
auto middle = std::chrono::steady_clock::now();
|
|
|
dump(idx, "BenchmarkCreate_" + std::to_string(coro), start, middle, coro);
|
|
|
dump(idx, "BenchmarkCreate_" + std::to_string(coro), start, middle, coro);
|