カメリアの記事

意味があることやないことを綴ります

シリアルとパラレル

Node.js についてちょっと調べました。 C10K 問題というのがあるそうで、これが一つのキーワードのようです。 C10K 問題は、いっぺんにウェブサーバにクエリが届くと従来の方法では処理しきれなくなるというもので、サーバの数を増やすなどして対応していたようです。旧来型ウェブサーバ Apache HTTP Server などです。それを解決したのが Node.js であったり nginx であったりするのだそうです。

で、従来の方法というのがクエリ一つひとつを別プロセスで処理するのだそうです。するとクエリがいっぺんに集中したときプロセスを増やす上限に達して、処理できなくなるということです。なるほど。

新しい方法は全てのクエリを一つのプロセスで処理するのだそうです。一つのプロセスが高速で処理していけば複数のプロセスに分けるより速いしプロセス数の上限に達することもない、と。

これシリアルとパラレルの話ですね。パソコンのハードウェアの話なんですが、データを 1 本の通信線で高速に送るほうが速いか(シリアル)、複数の通信線で並列して送るほうが速いか(パラレル)、という。昔から技術の進歩の具合でどっちが有利か入れ替わったりしているはずです。特に HDD との通信ですね。

CPU にも似たような話があって、少数の命令セットを高速で処理するか、多数の命令セットで各種演算に最適化するか、というやつ。 RISCCISC でしたっけ。これは両方がそれぞれ棲み分けているような印象ですが詳しいことはよく分かりません。

なんだか人間の作業性にも当てはまりそうな気がします。一つひとつ作業をこなしていくほうが得意な人と、複数の作業を同時進行的にこなしていくのが得意な人と。前者だと作業中に電話がかかってきたりすると著しく作業が滞ったりするんですよね。僕はシングルタスクなので前者なんですが。

こうしてみてくるとシリパラの話はどこにでもあるようです。一つの根源的な問題なんでしょうね。物事を考える際に考慮に入れておくといい原理なのではないでしょうか。