feat/support_fiber #2

Merged
tqcq merged 57 commits from feat/support_fiber into master 2024-06-21 10:33:52 +08:00
Showing only changes of commit 0c136e9e0c - Show all commits

View File

@ -1,3 +1,4 @@
#include "tile/base/chrono.h"
#include "tile/base/random.h" #include "tile/base/random.h"
#include "tile/fiber/detail/fiber.h" #include "tile/fiber/detail/fiber.h"
@ -7,7 +8,7 @@ namespace fiber {
namespace detail { namespace detail {
void Benchmark_FiberSwitch(benchmark::State &state) { void Benchmark_FiberSwitch(benchmark::State &state) {
constexpr int kFiberCount = 10000; constexpr int kFiberCount = 2 * 10000;
std::unique_ptr<Fiber> master; std::unique_ptr<Fiber> master;
std::unique_ptr<Fiber> worker[kFiberCount]; std::unique_ptr<Fiber> worker[kFiberCount];
@ -16,7 +17,22 @@ void Benchmark_FiberSwitch(benchmark::State &state) {
master = Fiber::Create([&]() { master = Fiber::Create([&]() {
while (state.KeepRunning()) { while (state.KeepRunning()) {
++cnt; ++cnt;
worker[Random(kFiberCount - 1)]->Resume(); auto &w1 = worker[Random(kFiberCount - 1)];
auto &w2 = worker[Random(kFiberCount - 1)];
auto start = ReadSteadyClock();
w1->Resume();
w2->Resume();
w1->Resume();
w2->Resume();
w1->Resume();
w2->Resume();
w1->Resume();
w2->Resume();
auto end = ReadSteadyClock();
auto duration = std::chrono::duration_cast<std::chrono::duration<double>>(
end - start) /
8;
state.SetIterationTime(duration.count());
} }
cnt = -1; cnt = -1;
@ -29,6 +45,9 @@ void Benchmark_FiberSwitch(benchmark::State &state) {
worker[i] = Fiber::Create([&, i]() { worker[i] = Fiber::Create([&, i]() {
while (cnt != -1) { while (cnt != -1) {
master->Resume(); master->Resume();
master->Resume();
master->Resume();
master->Resume();
} }
}); });
} }
@ -39,7 +58,7 @@ void Benchmark_FiberSwitch(benchmark::State &state) {
master->Resume(); master->Resume();
} }
BENCHMARK(Benchmark_FiberSwitch); BENCHMARK(Benchmark_FiberSwitch)->UseManualTime();
} // namespace detail } // namespace detail
} // namespace fiber } // namespace fiber
} // namespace tile } // namespace tile