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

並列処理

並列処理は、複数のタスクを同時に実行することを指します。この実行は主にマルチコアプロセッサなどの複数のハードウェアスレッドを活用して行われます。つまり、複数のコアがそれぞれ別々のタスクを処理することで、処理を高速化します。

特徴

  • 複数のタスクが同じタイミングで処理される
  • 並列処理には複数のCPUコアまたはスレッドが必要
  • パフォーマンスの向上(処理速度の向上)

イメージ図

Task 1: [----処理----]
Task 2: [----処理----]

Goサンプルコード

package main

import (
	"fmt"
	"math"
	"runtime"
	"sync"
)

// 配列内の要素を平方根に変換する
func parallelProcessing(arr []float64) []float64 {
	numCores := runtime.NumCPU() // 使用可能なCPUコア数
	runtime.GOMAXPROCS(numCores)

	chunkSize := len(arr) / numCores
	var wg sync.WaitGroup
	result := make([]float64, len(arr))

	// 並列で処理
	for i := 0; i < numCores; i++ {
		start := i * chunkSize
		end := start + chunkSize
		if i == numCores-1 {
			end = len(arr)
		}

		wg.Add(1)
		go func(start, end int) {
			defer wg.Done()
			for j := start; j < end; j++ {
				result[j] = math.Sqrt(arr[j])
			}
		}(start, end)
	}

	wg.Wait()
	return result
}

func main() {
	data := make([]float64, 1_000_000)
	for i := range data {
		data[i] = float64(i + 1)
	}

	result := parallelProcessing(data)
	fmt.Println("First 10 results:", result[:10])
}
Number of CPU cores: 4
First 10 results: [1 1.4142135623730951 1.7320508075688772 2 2.23606797749979 2.449489742783178 2.6457513110645907 2.8284271247461903 3 3.1622776601683795]

並行処理

並行処理は、複数のタスクを同時に進めているように見せることを指します。タスク間で処理を切り替えながら進行するため、実際には1つのCPUコアで複数のタスクを処理する場合もあります。

特徴

  • タスク間の切り替えを繰り返して実行される
  • 単一のコアでも実現可能
  • スループットの向上(複数のタスクを効率よく管理)

イメージ図

Task 1: [--処理--]         [--処理--]
Task 2:          [--処理--]         [--処理--]

Goサンプルコード

package main

import (
	"fmt"
	"time"
)

// 時間のかかる処理
func task(name string) {
	for i := 1; i <= 3; i++ {
		fmt.Printf("%s: step %d\n", name, i)
		time.Sleep(1 * time.Second)
	}
}

func main() {
    // 並行処理
	go task("Task A") 
	go task("Task B")
	go task("Task C")

    // プログラムが終了しないように待機
	time.Sleep(5 * time.Second)
	fmt.Println("All tasks completed")
}
Task C: step 1
Task A: step 1
Task B: step 1
Task B: step 2
Task A: step 2
Task C: step 2
Task C: step 3
Task A: step 3
Task B: step 3
All tasks completed
1
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
1
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?