Dockerを勉強するにあたって、プロセス間通信みたいな話が出てきて、厳密に理解できていなかったので勉強し始めたら、理解に苦しんだ。
ここでは細かい技術なんて説明しないし、正直理解にまでは及んでない。
それよりもなんでプロセス間通信が必要なんというところに着地したい。
多分、僕以外のエンジニアは当たり前じゃんと思うかも、、、
出てくる用語
- スレッドとプロセス
- プロセス間通信
そもそもプロセス間通信とは何か、なんのために存在するのか
プロセス間通信(プロセスかんつうしん、IPC、英: interprocess communication)はコンピュータの動作において、複数プロセス(の複数スレッド)間でデータをやりとりする仕組み。通信プロセスは、同一コンピュータ内で帰結するローカル、ネットワーク接続された別のコンピュータと相互にリモート、などのほかに多様な観点で分類され、スレッド間の通信帯域幅とレイテンシや扱うデータの種類も多種多様である。メッセージパッシング、同期、共有メモリ、RPCなどのメカニズムやプリミティブがある。
Wikipedia プロセス間通信
僕は思った。意味がわからんし、なんでプロセス間通信っていう言葉が生まれたのか。
そもそもプロセスってなんで、なんで通信で直接通信ができないのか。
プロセスとは何か、そしてよく出てくるスレッド
プロセスとは、OSが管理する一つの処理である。(ちなみにDockerのコンテナは一つのプロセスでしかない。)
それに対して、スレッドとはプロセスが管理するCPUが担当する一つの処理である。
ExcelとWordの関係ではなく、WordとWordの機能の関係である。
つまり図にすると下記であるが、レイヤーが違うことは認識しておきたい。
そして、プロセスにおいて重要な点がある。それは
各プロセスはメモリを共有できない
ということである。この原則はとても重要である。
OSが各プロセスに対してメモリの利用範囲を決める。そして、そのプロセスはそのメモリから外に出ることはできない。つまり、プロセスは与えられたメモリの中で完結する。これはDockerのコンテナが互いに干渉しないことの説明にもなる。
正直、この前提が抜けていたからプロセス間通信を聞いても意味不明だった。
ここを理解できれば、あとは手段の話である。
各技術に対しては随時勉強していくとして、ソケット通信や名前付きパイプなどの目的を理解すると勉強もしやすいと思っている。
以上。