同期と非同期
A と B でやりとりする場合を考える。
処理の場合、A が B を呼び出す形。A が B に仕事をお願いして、B が処理して、その結果を A に返す。
- 1: A → B
- 2: B 側で処理
- 3: A ← B
コミュニケーションの場合、A と B がやりとりをする。
いずれにせよ、A から B に、または B から A に何らかの情報を渡していることになる。情報をやりとりしている。
同期
同期とは ターン制 のこと。
A から B に情報を渡したら、A は B から返事が返ってくるまで待つ。
一往復の場合はこれで終わりだが、n 往復する場合、交互に待つことになる。
- 1: A → B
- 2: B 側で処理(この間、Aは待っている)
- 3: A ← B
- 4: A 側で処理(この間、Bは待っている)
- ……
まるでポケモンやカードゲームで交互にターンが来ているかのよう。
非同期
非同期とは 渡したらおしまい のこと。
A から B に情報を渡した後、A は B の返事を待たない。
ただしこれだけだとやりとりできないので、A は受信箱をつくっておいて、「なあ B さん、返事があったらここに入れといてくれよ」とする。適当なタイミングで受信箱を見て、もし B からの返事があったら対応する。なければ対応しない。あった場合も、別にすぐに対応する必要はない。
ちなみに、A についても、B に直接渡しているというよりは、B の受信箱に情報を入れている 形となる。
同期と非同期の使い分けは?
どちらもメリデメがある。
同期のメリデメ
同期のメリット:
- 早いこと
- 直接捕まえて、待たせて、やりとりをさせるのだから一番早い
- 信頼できること
- 互いがお互いを独占しており、相手のことも、やりとりの内容もわかっている
- わかりやすいこと
- 人間のコミュニケーションが同期的なので、わかりやすい
同期のデメリット:
- 拘束されること
- やりとりが終わるまではずっと拘束される(ブロッキング)
- B が遅くても待たないといけないし、途中でミスったら最初からやり直さないといけない
- 途中で保存とかしておけばそこからやり直せるけど
非同期のメリデメ
非同期のメリット:
- 待たなくてもいいこと
- 相手の受信箱に入れておけばいいだけ
- 情報を広くやりとりできること
- 受信箱を見れる人は誰でも見れる
- 誰でも受信箱に情報を入れられる
- たとえば、1人が1000人から情報を受け付けることもできる(処理じゃなくて受け付ける段階)
非同期のデメリット:
- 早くないこと
- 少なくとも同期よりは遅くなる
- 信頼しづらいこと
- 確実に見てもらえたか、処理してもらえたかがわからない
- 続けるのがちょっと難しいこと
- 同期だとお互いに順にやりとりするだけで進めていける
- でも非同期だと、適当に受信箱に放り投げるだけでは成立しづらい
- どの受信箱に何を置いて、こっちの受信箱はこういう情報を入れて……みたいな取り決めや流れを工夫しないといけない
元は同期だけでしょ?なんで非同期が出てきた?
Ans: 同期のデメリットである「拘束される」がキツイから。
プログラムやシステムの話
ずっと待たされると遅くてストレスである。融通が利かない。
コンピュータは基本的に処理が早いが、それでも処理する量や性能によって遅くなることがある。また、途中でエラーが出たり、フリーズして永遠に応答しなくなったり、ネットワーク回線が途中で切れてそもそも通信できなくなったり、単純にプログラム A が相手してるプログラム B が異常終了していたり、などトラブルは起こる。その度にやり直し?冗談じゃない。特に昨今はクラウドで、色んなサービスとやりとりするようなシステムも多い感じで「本質的に複雑」、ゆえに「それなりにトラブルは起きる」。同期だけだとキツすぎ。神頼みになっちゃうよ。
もっと融通を利かせるための仕組みを偉い人が?考えて、非同期的なやり方が生まれた。すでに述べたとおり、非同期で上手くやるためには色々工夫しないといけないが、逆を言えば工夫さえできれば成立できる。成立した。工夫は結構難しいし、使い所も決して万能ではないが、ともかく拘束から解放されたのだ。
次にコミュニケーションの話
この考え方はコミュニケーションにも応用できる。
コミュニケーションは従来、ほぼ対面で口頭で喋るものだった。これは同期的と言えるが、時間や場所を拘束するので融通が利かない。
そうではなくて、情報を残し合ってやりとりできれば、同期的に待たされずに済む。元々手紙やメールなど、改めて言うまでもないほど当たり前にあったが、まだまだ実用的ではなかった。たとえば手紙やメールだけで仕事を完結させられるか、というと厳しい。
それが技術の発展により、比較的実現しやすくなった。特に Slack や Teams などビジネスチャットの存在がわかりやすい。単純に時系列的にメッセージを流すことしかできなかったチャットという世界に、ワークスペースやチャンネルやスレッドという分類を設けたことで、ビジネスで使える代物になった。まだまだこれだけですべてのコミュニケーションをまかなえるほどではないが、だいぶ融通が利くようになった。
また、非同期とは情報を残しておくことも意味するので、皆が読める場所で残せば、皆に情報を見てもらえる。情報共有や透明性の観点でも優れている。
※ちなみにリモートであっても、実態としてはリモート会議が多いと思う。これはリモートで同期的にコミュニケーションしている。まだまだ人類のコミュニケーションは同期的だろう。ゆえに拘束される。