How to implement parallel processing using Go coroutines?

WBOY
Release: 2024-06-05 18:07:01
Original
676 people have browsed it

How to use Go coroutines to implement parallel processing? Create a coroutine to calculate the Fibonacci sequence in parallel. Coroutines transfer data through channels to achieve parallel computing. The main coroutine receives and processes the results of parallel calculations.

如何使用 Go 协程实现并行处理?

How to use Go coroutines to implement parallel processing

Introduction to coroutines

Coroutines are a lightweight concurrency primitive in Go that allow execution to be paused and resumed within a goroutine (concurrently executed function) without starting a new thread or process. This helps improve concurrency efficiency and reduce memory consumption.

Practical case: Parallel calculation of Fibonacci numbers

In order to demonstrate the parallel processing capabilities of coroutines, we create a Go program to calculate Fibonacci numbers in parallel :

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)
    go fib(20, ch)  // 启动一个协程计算斐波那契数
    time.Sleep(100 * time.Millisecond)  // 等待协程完成

    result := <-ch  // 从 channel 中接收计算结果
    fmt.Println("斐波那契数列的第 20 项:", result)
}

func fib(n int, ch chan int) {
    if n <= 1 {
        ch <- 1
        return
    }

    ch1 := make(chan int)
    ch2 := make(chan int)
    go fib(n-1, ch1)  // 通过协程并行计算斐波那契数列
    go fib(n-2, ch2)

    f1 := <-ch1
    f2 := <-ch2
    ch <- f1 + f2  // 并行计算的结果相加后发送到主协程
}
Copy after login

Run the program

After running the program, the 20th item of the Fibonacci sequence will be output in the terminal:

斐波那契数列的第 20 项: 6765
Copy after login

Note

  • Coroutines do not need to explicitly release resources.
  • Excessive use of coroutines may cause performance problems because each coroutine has its own stack space.
  • For blocking operations (such as I/O), channels should be used for communication instead of passing data directly between coroutines.

The above is the detailed content of How to implement parallel processing using Go coroutines?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template