in e2e-examples/gcs/sample/main.cc [132:158]
int main(int argc, char** argv) {
absl::ParseCommandLine(argc, argv);
ChannelManager channel_manager(absl::GetFlag(FLAGS_channels),
&CreateBenchmarkGrpcChannel);
// Spawns benchmark runners and waits until they're done.
absl::Time run_start = absl::Now();
std::atomic_size_t total_size(0);
std::vector<std::thread> runner_threads;
for (int i = 0; i < absl::GetFlag(FLAGS_threads); i++) {
runner_threads.emplace_back([&channel_manager, &total_size]() {
worker(channel_manager, total_size);
});
}
std::for_each(runner_threads.begin(), runner_threads.end(),
[](std::thread& t) { t.join(); });
absl::Time run_end = absl::Now();
// Shows the result.
double elapsed = absl::ToDoubleSeconds(run_end - run_start);
std::cout << "Data: " << total_size << " bytes" << std::endl;
std::cout << "Elapsed: " << elapsed << " sec" << std::endl;
std::cout << "Throughput: " << total_size / elapsed / 1024 / 1024 << " MB/s"
<< std::endl;
return 0;
}