Go言語における**Goroutine(ゴルーチン)**は、軽量なスレッドのようなもので、Goが提供する並行処理の中心的な機能です。Goroutineを使うことで、プログラムの複数の処理を同時に実行することができます。以下に、Goroutineの基本について詳しく説明します。
1. Goroutineとは何か
Goroutineは、Goランタイムによって管理される**軽量な実行単位(軽量スレッド)**です。Goroutineは非常に軽く、数千~数百万単位で同時に実行することも可能です。
Goでは、Goroutineを使って並行処理を簡単に書くことができます。
2. Goroutineの実行方法
関数をGoroutineとして実行するには、その関数呼び出しの前に go キーワードを付けます。
解説:
-
go sayHello()のように記述することで、sayHello関数が新しいGoroutineとして並行実行されます。 -
main関数が終了するとすべてのGoroutineも終了するため、time.Sleepで待機時間を入れて実行を確認しています。
3. Goroutineの特徴
-
軽量性: 一つのGoroutineは数KBのスタックサイズで始まり、必要に応じて自動で拡張されます。
-
低オーバーヘッド: OSスレッドよりもオーバーヘッドが少なく、大量に起動してもパフォーマンスが保たれます。
-
Goランタイムによるスケジューリング: GoroutineはGoランタイムのスケジューラによって管理され、利用可能なCPUコアに分配されます(M:Nスケジューリングモデル)。
4. Goroutineの注意点
-
同期の必要性: 複数のGoroutineが同じリソース(変数など)にアクセスすると、競合状態(race condition)になる可能性があります。
-
同期にはChannelやMutexを使用: Goでは
channelやsync.Mutexなどを使ってGoroutine間の通信や同期を行います。
5. Goroutineを使う主な場面
-
並列ダウンロードやファイル処理
-
Webサーバーにおけるリクエストごとの処理
-
非同期I/O操作(例: データベースアクセス、API呼び出し)
まとめ
| 項目 | 説明 |
|---|---|
| 概要 | 軽量な並行処理単位(軽量スレッド) |
| 実行方法 | go 関数名() |
| メリット | 軽量、高速、スケーラブル |
| 注意点 | 同期を行わないと競合状態が発生する可能性あり |
| 主な用途 | 並列処理、非同期処理、Webサーバーの並列リクエスト処理など |
生成日:2025/05/03