1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

同期と非同期の違いを理解する(同期処理とか非同期コミュニケーションとか)

Last updated at Posted at 2024-09-28

同期と非同期

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 などビジネスチャットの存在がわかりやすい。単純に時系列的にメッセージを流すことしかできなかったチャットという世界に、ワークスペースやチャンネルやスレッドという分類を設けたことで、ビジネスで使える代物になった。まだまだこれだけですべてのコミュニケーションをまかなえるほどではないが、だいぶ融通が利くようになった。

また、非同期とは情報を残しておくことも意味するので、皆が読める場所で残せば、皆に情報を見てもらえる。情報共有や透明性の観点でも優れている。

※ちなみにリモートであっても、実態としてはリモート会議が多いと思う。これはリモートで同期的にコミュニケーションしている。まだまだ人類のコミュニケーションは同期的だろう。ゆえに拘束される。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?