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

Goの並行処理とは?CPU・スレッド・goroutineの関係を整理してみた

Last updated at Posted at 2025-04-28

はじめに

Goの並行処理をイメージできるようになりたく、以前は「CPU・OS・スレッド・プロセス」の関係性を少し深掘りました。
https://qiita.com/TechCraft/items/7c72b0ff74901b64de4e

今日は、その知識を使って、Goの並行処理について少し深掘ります。

並行処理と並列処理の違い

まず、CPUにはコアがあり、コアがスレッドを処理する。

  • 1つのコアで複数のスレッドを切り替えながら処理することを「並行処理」と呼ぶ。
  • 複数のコアで複数のスレッドを物理的に同時に処理することを「並列処理」と呼ぶ。

Goの並行処理の特徴

Goでは、並行処理に特徴的な仕組みがある。

  • 1つのOSスレッドの中で、複数の小さなタスク(goroutine)を動かす。
  • goroutineの管理は、Goランタイムが行っている。

つまり、
1つのコア → 1つのOSスレッド → 複数のgoroutine
という構成で、タスクを効率よく並行処理している。

メリットは?

普通、OSスレッドを増やして並行処理をしようとすると、

  • スレッド作成コストが重い(システムコール)
  • スレッド切り替えコストも高い(カーネルスケジューリング)
    という問題がある。

Goの設計では、

  • OSスレッドの数を最小限に抑え
  • goroutineという軽量なタスクを大量に回す
    ことで、
    スレッド作成・切り替えコストを削減しながら、
    超大量の並行処理を高速に行える仕組みになっている。

まとめ

  • CPUコアはOSスレッドを実行する
  • Goでは、OSスレッドの上でさらに複数のgoroutineをGoランタイムが管理している
  • goroutineは非常に軽量なため、スレッドをたくさん作る必要がない
  • スレッド作成・切り替えコストを削減しながら、効率的な並行処理を実現している

Goの並行処理を理解するためには、
「CPU→スレッド→goroutine」の三層構造を意識することが大切だと感じました。

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