| % together/together.tex |
| % mainfile: ../perfbook.tex |
| % SPDX-License-Identifier: CC-BY-SA-3.0 |
| |
| \QuickQuizChapter{chp:Putting It All Together}{Putting It All Together}{qqztogether} |
| % |
| \Epigraph{You don't learn how to shoot and then learn how to launch |
| and then learn to do a controlled spin---you learn to |
| launch-shoot-spin.}{\emph{Ender's Shadow}, Orson Scott Card} |
| |
| % And the paragraph preceding this is also instructive: |
| % ``I may be pissed off, but that doesn't mean I can't learn.'' |
| |
| This \lcnamecref{chp:Putting It All Together} |
| gives some hints on concurrent-programming puzzles. |
| \Cref{sec:together:Counter Conundrums} |
| considers counter conundrums, |
| \cref{sec:together:Refurbish Reference Counting} |
| refurbishes reference counting, |
| \cref{sec:together:Hazard-Pointer Helpers} |
| helps with hazard pointers, |
| \cref{sec:together:Sequence-Locking Specials} |
| surmises on sequence-locking specials, |
| \cref{sec:together:RCU Rescues} |
| and |
| reflects on RCU rescues. |
| Finally, |
| although the best performance and scalability results from design rather |
| than after-the-fact micro-optimization, micro-optimization is nevertheless |
| necessary for the absolute best possible performance and scalability. |
| Therefore, |
| \cref{sec:together:Micro-Optimization} |
| meanders through a few micro-optimizations. |
| |
| \input{together/count.tex} |
| \input{together/refcnt.tex} |
| \input{together/hazptr.tex} |
| \input{together/seqlock.tex} |
| \input{together/applyrcu.tex} |
| \input{together/microopt.tex} |
| % batching to trade off latency for perf/scale. |
| |
| \QuickQuizAnswersChp{qqztogether} |