int main()

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;
}