
2014/1/14 Antony Polukhin
Pseudocode:
void foo(){} const unsigned N = 1000;
// Test #1 timer start for (unsigned i = 0; i < N; ++i) { fiber f(&foo); f.join(); }
cout << "Fibers: " << timer stop;
timer start for (unsigned i = 0; i < N; ++i) { boost::thread f(&foo); f.join(); }
cout << "Threads: " << timer stop;
// Test #2 timer start for (unsigned i = 0; i < N; ++i) { fiber f1(&foo), f2(&foo), f3(&foo), f4(&foo), f5(&foo); f1.join(); f2.join(); f3.join(); f4.join(); f5.join(); }
cout << "Fibers: " << timer stop;
timer start for (unsigned i = 0; i < N; ++i) { boost::thread f1(&foo), f2(&foo), f3(&foo), f4(&foo), f5(&foo); f1.join(); f2.join(); f3.join(); f4.join(); f5.join(); }
cout << "Threads: " << timer stop;
// Test #3 timer start for (unsigned i = 0; i < N; ++i) { fiber(&foo).detach(); }
cout << "Fibers: " << timer stop;
timer start for (unsigned i = 0; i < N; ++i) { boost::thread(&foo).detach(); }
cout << "Threads: " << timer stop;
I did a quick hack and the code using fibers is 2-3 times faster than the threads. boost.fiber does not contain the suggested optimizations (like replacing stl containers)