3章非同期キューの自作
これまでに、非同期構文の基本を説明し、高レベルな非同期の概念を用いて問題を解決した。しかし、タスクとフューチャの実態や、これらが非同期ランタイムで処理される過程について、完璧には理解できていないだろう。フューチャやタスクは、説明するのも理解するのも難しい。本章では、これまでにフューチャやタスクや非同期ランタイムでの処理について学んだことを定着させるために、最小限の外部ライブラリを用いて非同期キューを自作する。
この非同期ランタイムは、キューの数や、個々のキューを処理するスレッドの数を変更することができる。それぞれのキューが同じである必要はない。例えば、2つしか処理スレッドを持たない低優先度のキューと、5つの処理スレッドを持つ高優先度のキューを用意することもできる。フューチャを処理する際に、キューを選択することができる。さらに、タスクスティーリングを実装する。あるキューが空になった場合に、別のキューからタスクをスティールするのだ。最後に、非同期ランタイムを高い抽象度で利用できるようにマクロを自作する。
本章を読めば、非同期キューを自作できるようになり、フューチャやタスクが非同期ランタイムで処理される過程を完全に理解できるようになるだろう。また、非同期ランタイムをカスタマイズして、標準のランタイム環境をそのまま使うのでは解決できないような特殊な問題に対応できるようになるだろう。非同期キューを自作したいとは思わなくても、非同期ランタイムをより深く理解することで、高レベルな非同期クレートをうまく操作し効率的に問題を解決できるようになるはずだ。また、高レベルな非同期コードを書く場合にも存在する非同期コードのトレードオフを理解できるようになるだろう。
まず、タスクの起動の部分から非同期キューを構築していく。タスクの起動が非同期ランタイムのエントリポイントとなるからだ。この非同期ランタイムはカスタマイズ可能になっており、キューの数と、それぞれのキューを処理するスレッドの数を選択することができる。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access