3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Concurrencyとは

Last updated at Posted at 2022-10-23

Goでの並列処理について調べていたらConcurrencyというキーワードが出て来たのでなんぞと思って調べてみました。

Concurrencyとは

  • 「同時性」という意味。「並行性」とも呼ばれる
  • 複数のタスクを同時に実行している状態
  • 一つのタスクが完了してから次のタスクを始めるわけではなく、複数のタスクがそれぞれ実行中の状態になる
  • アプリケーションを高速化するための仕組み・プログラムのデザイン
  • Parallelism(並列性)は言葉は似ているが、プログラムというよりランタイムの性質で、「複数のCPUを使っている状態」を指す。「並行かつ並列」な状態や「並行だけど並列じゃない状態」は両方ありえる

ConcurrencyとParallelismの違い
Difference between Concurrency and Parallelism

Concurrencyで速くなる仕組み

一つのCPUしか使わないんだったらいくらタスクを切り刻んで順番入れ替えてもトータルの速さは変わらないんじゃ?と考える人もいるかも知れませんが、「I/OなどCPUを使わないけど時間がかかる処理をしているタスクは他のタスクにCPUを譲り、CPUの待ち時間を減らすことで、結果的に全部のタスクが終わる時間が速くなる」ということのようです。

コンロが一個しかない料理屋みたいな感じです。(自分の料理を作り終わってから他の人にコンロを渡すのではなく、コンロを使ってないときは他の人に使わせる)

↓Concurrentじゃないプログラムで複数のタスクを実行した場合(CPUの待ち時間が発生する)
image.png

↓Concurrentにした場合(CPUの待ち時間が無い)
image.png

画像引用元: https://realpython.com/python-concurrency/#what-is-concurrency

Concurrentなプログラムのデメリット

一見画期的に見えますが、以下のようなデメリットがあり、闇雲に導入すればいいというわけではないようです。

  • 複雑さが増す
  • 工数がかかる
  • Concurrencyをキープするための仕組み(semaphore、mutex、lockなど)の初期化と終了にかかる時間、デッドロックやリソーススタベーションを防ぐための処理が追加されるので場合によっては遅くなる

Concurrencyのオーバーヘッドについての記事
Is Concurrency Really Increase the Performance?

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?