【せいさんしゃしょうひしゃもんだい】
生産者-消費者問題 とは?
💡 回転寿司のレーン――板前が流して客が取る、でもレーンには限りがある!
📌 このページのポイント
生産者-消費者問題って何?
回転寿司をイメージしてみて。板前さん(生産者)がお寿司を作ってレーンに流す。お客さん(消費者)がレーンからお寿司を取る。でもレーンには限りがあるよね。レーンが満杯なら板前さんは待つし、レーンが空ならお客さんは待つ。この調整をどうするかという問題だよ
プログラミングだとどういう場面で出てくるの?
どうやって実装するの?
もっと簡単に書ける方法はないの?
バッファのサイズってどのくらいにすればいいの?
これが意外と難しい問題なんだ。大きすぎるとメモリを浪費するし、小さすぎると生産者がすぐブロックされて性能が落ちる。一般的にはCPUコア数の数倍程度が目安だけど、実際にはプロファイリングして調整するよ
現代のシステムでも使われているの?
むしろ現代のほうが重要になっているよ。Apache KafkaやRabbitMQなどのメッセージキューはまさに大規模な生産者-消費者パターンだし、Goのchannelもこのパターンを言語レベルでサポートしているんだ
古い問題なのに今でも現役なんだね!
📖 おまけ:英語の意味
「Producer-Consumer Problem」 = 生産者-消費者問題
💬 Producer(生産者)とConsumer(消費者)がバッファを介してやり取りする問題で、1965年にダイクストラが定式化したんだよ