本文概述
- Goroutines
- 并发示例
Goroutines同时运行的应用程序部分称为goroutines。 Goroutine和通道用于构造并发程序。
进程是在计算机中运行的独立执行实体, 该计算机在内存中自己的地址空间中运行。进程具有同时执行实体的线程。线程共享进程的相同地址空间。
Goroutine很轻巧, 比线程轻得多。 Goroutine在相同的地址空间中运行, 因此必须同步访问共享内存。这可以通过sync包来完成, 但是建议使用通道来同步goroutine。
goroutine被实现为函数或方法。它用“ go”关键字调用(调用)。当goroutine完成时, 没有任何内容返回给调用者函数。
并发示例
package main
import (
"fmt"
"time"
"sync"
)
var wg = sync.WaitGroup{}func main() {
wg.Add(2)
go fun1()
go fun2()
wg.Wait()
}
func fun1(){
fori:=0;
i<
10;
i++{
fmt.Println("fun1, ->
", i)
time.Sleep(time.Duration(5*time.Millisecond))
}
wg.Done()
}
func fun2(){
for i:=0;
i<
10;
i++{
fmt.Println("fun2, ->
", i)
time.Sleep(time.Duration(10*time.Millisecond))
}
wg.Done()
}
【Go并发编程】输出:
fun2, ->
0
fun1, ->
0
fun1, ->
1
fun2, ->
1
fun1, ->
2
fun1, ->
3
fun2, ->
2
fun1, ->
4
fun1, ->
5
fun2, ->
3
fun1, ->
6
fun1, ->
7
fun2, ->
4
fun1, ->
8
fun1, ->
9
fun2, ->
5
fun2, ->
6
fun2, ->
7
fun2, ->
8
fun2, ->
9