memo/20240122
created 2024-01-22 modified 2024-03-24
これからは oss の イベントループ を使おう、という独り言。
ネットワーク上で何らかの通信を行うプログラムを作る時には、…なんていうと今どきはあらゆるプログラムが通信を行うので全部になってしまうのだけど。
通信するプログラムを作るときには実装の基本方式がいろいろあって、プログラマはそういう「実装方式」を自分で列挙して、試して(つまり作っては壊してを繰り返し)、自分なりの一番好きな方式を選択する必要があると思う。でも、なかなかの作業量になるので、重い腰が動かないもの。なので、人生を通して特定の「案件」で経験することで、そういった試行、試作、思考、選択を行っていくものなのだと思う。
自分には、「ブロッキングソケットでselectによる多重」方式、でとても成功した経験が複数ある。それ以外の方式、大量のスレッドを作る方式や、非同期ソケットの方式、には逆に失敗した経験の記憶が張り付いていて、「言葉にできないが避けたい気持ち」を持っている。それが良いのか悪いのか、今となってはよくわからない。
自分は select を使うメインループライブラリや、 epoll を使うメインループを書いたことがある。成功した。
Windows (.net) で動く、非同期ソケット方式のメインループも書いたことがある。やりきったけどその後消えた。
Java で動く、スレッド多重方式の通信処理を書いたこともある。これも、消えた。
それらは、案件で作ったコードで、顧客企業の持ち物 なので、一般公開はできない。そもそも手元にもない。
メインループライブラリ上でアプリを書くノウハウも、基本概念は使えるけど、細かい話は流用、応用できない。
だから、これからは メインループまで自分が書くのではなく、他の人が書いた 公開されているメインループを使って仕事をしようと思ったことであるよ。
「ブロッキングソケットでselectによる多重」方式が好き:
libevent の version2 が良い。(include <event2/event.h>)
「ノンブロッキングソケット」方式は嫌い:
libuv は、自分は好きじゃない。
POSIX だけでなく Windows のソケットライブラリと親和性を高めるには必要だけど。
ソケット以外の観点でも、Windows はプログラマにやたらと要求が多くて、嫌い。OSの設計や基本ポリシーが洗練されていれば、プログラマが個々に悩まなくて済むことが、いちいち引っかかる。Windows の、そういうところが嫌い。なので、Windowsと共通化するためだけに必要で、余計な複雑性を持ち込む libuv は、好きじゃない。
面白そうなページを見つけたので後で読みたい。
と言って読まないことも多いのだけどさ。
【* 日々のメモ】