Home  >  Article  >  Backend Development  >  How to use multi-process in Go?

How to use multi-process in Go?

WBOY
WBOYOriginal
2023-05-11 15:24:112076browse

With the improvement of computer performance and the popularity of multi-core processors, multi-process programming has gradually become an indispensable part of the modern programming field. In the Go language, multi-process programming is also very easy to implement. This article will introduce how to use multi-process in Go.

1. Goroutines
In the Go language, concurrent programming can be achieved through Goroutines. "Goroutine" can be regarded as a "lightweight thread" in the Go language. Goroutines are scheduled by the Go runtime, not by the operating system. Therefore, in the Go language, using Goroutines to open multiple threads does not bring too much overhead. As shown below, is a simple example of using Goroutines:

package main

import (
    "fmt"
    "time"
)

func main() {
    go task1()
    go task2()
    time.Sleep(3*time.Second)
}

func task1() {
    for i := 1; i <= 5; i++ {
        fmt.Println("Task 1: ", i)
        time.Sleep(time.Second)
    }
}

func task2() {
    for i := 1; i <= 5; i++ {
        fmt.Println("Task 2: ", i)
        time.Sleep(time.Second)
    }
}

In the above example, the program uses two Goroutines to start two tasks task1 and task2. Each task will output its own number and then pause for one second. The program finally uses time.Sleep(3*time.Second) and waits for three seconds before the program ends to ensure that the two tasks are completed.

2. Use the os package to implement multiple processes
In the Go language, you can use the StartProcess function in the os package to start a new process. The StartProcess function receives the path of an executable file as a parameter, and this function will run the executable file as a new process. At the same time, through the parameter settings of the StartProcess function, the stdin, stdout or stderr of the current program can be redirected to the started program. In the following example, start an external command and let the program wait for the command execution to complete:

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    binary, lookErr := exec.LookPath("ls")
    if lookErr != nil {
        panic(lookErr)
    }

    args := []string{"ls", "-a", "-l", "-h"}

    env := os.Environ()

    execErr := syscall.Exec(binary, args, env)
    if execErr != nil {
        panic(execErr)
    }
}

In the above example, the program uses the exec.LookPath function to find the ls command that can be executed in the system and prepares to start a new process. At the same time, by defining the args variable, the parameters that need to be passed to the command after starting the process are set. Finally, use the syscall.Exec function to start the new process.

3. Use channel communication
In the Go language, channels can be used for data transfer and coordination between different processes. Using channels can avoid race conditions caused by processes accessing the same resource. In the following example, the use of channel communication between three different processes is shown:

package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    c := make(chan int)
    go pinger(c)
    go ponger(c)
    go printer(c)

    var input string
    fmt.Scanln(&input)
}

func pinger(c chan<- int) { // send only channel
    for i := 0; ; i++ {
        c <- i
    }
}

func ponger(c chan<- int) { // send only channel
    for i := 0; ; i++ {
        c <- i*2
    }
}

func printer(c <-chan int) { // receive only channel
    for {
        fmt.Println("Received value: ", <-c)
    }
}

In the above example, three Goroutines are opened in the program. The pinger and ponger functions use a "send-only" type of channel to send data to the printer function. The printer function uses a "receive-only" type of channel, and uses an infinite loop to continuously read data from the channel and print the output.

Summary
Go language provides a variety of ways to use multi-process, including using Goroutines, os.StartProcess and channel communication, etc. Using these methods can better utilize the computing power of multi-core processors and improve program performance and concurrency. At the same time, each method has its unique advantages and disadvantages. In the actual programming process, different methods need to be selected according to specific scenarios.

The above is the detailed content of How to use multi-process in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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