NginxやNetty、Node.jsなど日常的に利用されているミドルウェアでも主流になりつつあるのにいまひとつ正しく理解されているのかどうか怪しいノンブロッキングIOですが、その概念について社内の技術共有会でコンビニを題材に説明していたのが面白かったので少しアレンジして紹介してみたいと思います。 ここではスレッド、CPU、リクエストを以下のように表現することにします。 店員=スレッド レジ=CPU 客=リクエスト 1. シングルスレッド×ブロッキングIO まずは最も単純なシングルスレッド×ブロッキングIOです。図にするとこんな感じです。 店員(スレッド)が1人しかいないので同時に1人のお客さんしか処理できません。また、現実にはあり得ませんが、店員はアルバイトを始めて間もないのか、お弁当の温め中も電子レンジに張り付いており、温め終わるまで次のお客さんは待たされてしまいます。 2. マルチス