...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Performance of Boost.Coroutine was measured
on the platforms shown in the following table. Performance measurements were
taken using rdtsc
and boost::chrono::high_resolution_clock
,
with overhead corrections, on x86 platforms. In each case, cache warm-up was
accounted for, and the one running thread was pinned to a single CPU.
Table 1.1. Performance of asymmetric coroutines
Platform |
switch |
construction (protected stack-allocator) |
construction (preallocated stack-allocator) |
construction (standard stack-allocator) |
---|---|---|---|---|
i386 (AMD Athlon 64 DualCore 4400+, Linux 32bit) |
49 ns / 50 cycles |
51 µs / 51407 cycles |
14 µs / 15231 cycles |
14 µs / 15216 cycles |
x86_64 (Intel Core2 Q6700, Linux 64bit) |
12 ns / 39 cycles |
16 µs / 41802 cycles |
6 µs / 10350 cycles |
6 µs / 18817 cycles |
Table 1.2. Performance of symmetric coroutines
Platform |
switch |
construction (protected stack-allocator) |
construction (preallocated stack-allocator) |
construction (standard stack-allocator) |
---|---|---|---|---|
i386 (AMD Athlon 64 DualCore 4400+, Linux 32bit) |
47 ns / 49 cycles |
27 µs / 28002 cycles |
98 ns / 116 cycles |
319 ns / 328 cycles |
x86_64 (Intel Core2 Q6700, Linux 64bit) |
10 ns / 33 cycles |
10 µs / 22828 cycles |
42 ns / 710 cycles |
135 ns / 362 cycles |