#include #include #include #include #include namespace asio = boost::asio; void f( int i ) { // do actually nothing... int j = i*2; j = j/4; } int main(int argc, char *argv[]) { for( std::size_t concurrency=1; concurrency<9; ++concurrency ) { //std::size_t const concurrency = 3; std::cout << "Concurrency = " << concurrency << std::endl; asio::io_service io_service( concurrency ); boost::timer t; double jobsize = 10000000; for( int i = 0; i < int(jobsize); ++i ) { io_service.post( boost::bind( &f, i ) ); } double a( t.elapsed() ); std::cout << "Finished posting after: " << a << std::endl; std::vector< boost::shared_ptr > threads; for( std::size_t i=0; i<(concurrency-1); ++i ) { threads.push_back( boost::shared_ptr(new boost::thread( boost::bind( &asio::io_service::run, &io_service))) ); } for( std::size_t i=0; i<(concurrency-1); ++i ) { threads[i]->join(); } io_service.run(); double b( t.elapsed() ); std::cout << "Finished execution after: " << b << " " << t.elapsed() << std::endl; std::cout << "Execs / sec: " << jobsize << "/" << (b-a) << "=" << (jobsize/(b-a)) << std::endl; } return EXIT_SUCCESS; }