『プログラミングErlang』8章 練習問題
リングのベンチマークを書いてみよう。N 個のプロセスからなるリングを作り、1 つのメッセージがリングをM回まわるようにして、合計でN * M個のメッセージが送信されるようにする。さまざまなNとMの値について所要時間を測ってみよう。
とりあえず 8 章までの知識で。プロセスのlinkとかプロセス辞書とかまだ知らない。
erl --noshell -s ringbench main 100 100 -s init stop
当初は、リングを構成するどのプロセスも区別しない(どのプロセスからでもメッセージの周回を開始できる)方法を考えようとしたけど、うまくまとまらないので先頭とそれ以外を区別した。
ring:create/1
はプロセスのリングを作り、先頭のプロセスIDを返す。先頭プロセスはクライアントプロセスから {emit, M}
を受信すると {relay, Client, M, 通過プロセス数}
をM週させ、それが終わるとクライアントに {reached, 通過プロセス数}
を返信する。
本を読み進めて新しい知識を得たら適用してゆくつもり。