digraph g { edge [ fontname="Helvetica", fontsize=10, labelfontname="Helvetica", labelfontsize=10 ]; node [ fontname="Helvetica", fontsize=10, shape=record ]; initiator [ label="Initiator" ]; async_processor [ label="Asynchronous\nOperation Processor" ]; async_op [ label="Asynchronous\nOperation" ]; completion_queue [ label="Completion\nEvent Queue" ]; async_event_demuxer [ label="Asynchronous\nEvent Demultiplexer" ]; proactor [ label="Proactor" ]; handler [ label="Completion\nHandler" ]; initiator -> async_processor [ label="uses", style="dashed" ]; initiator -> async_op [ label="starts", style="dashed" ]; initiator -> handler [ label="creates", style="dashed" ]; async_processor -> async_op [ label="executes", style="dashed" ]; async_processor -> completion_queue [ label="enqueues", style="dashed" ]; async_op -> handler; async_event_demuxer -> completion_queue [ label="dequeues", style="dashed" ]; proactor -> async_event_demuxer [ ]; proactor -> handler [ label="demultiplexes\n& dispatches" style="dashed" ]; }