2009年3月14日土曜日

boost::asio で pop3 (1)

 実は、日本SpamAssassinユーザ会に入って活動するにあたり、パーソナル・ユースのスパムよけメーラが、どいつもこいつも気にいらない(その状況は現在も変わっていない)ので、日本語対応のSpamAssassinと絡めて、パーソナル・ユースのものを作成したいと思ったのが、boost::asio で pop3 を実装してみようと思ったきっかけでした。
 何故、空前の C++ ブームというものが起こるか?というと、受託開発型だとソフトウェアを高速化するのに3人月かけるぐらいなら、スペックの高いハードウェアを投資した方が割に合いますが、ロングテールでビジネスするならランニング・コストは安い方が良いからだと思います。それは、さておき、asio の設計は理に適っています。
 一枚のLANカードに一度にアクセスできるのは、ひとつのプロセスでしょうが、マルチスレッドで処理をしても、この制限があるために、結局はリソースの競合を避けるために同期保護を行わなければなりません。ひとつしかないトイレで用をたせるのは、一度に一人だからです。asio では、行列を作って直列に処理をさせます。ただし通信は相手がある事なので、処理できる状態の行列と、処理できない状態の行列(送信待ち、受信待ち、タイマー待ち等)の2つ行列を作成します。こうする事で滞りなく処理ができるというわけです。
 次回からは、実際にコーディングをしてみて、asio ならではの考え方について書こうと思います。ただし、socket プログラミングはやった事が無かったので、細かい構造までは理解していません。

0 件のコメント: