Golang教程-Go并发

Go并发
大型程序被分割成较小的子程序。同时运行其较小组件的程序称为并发。
Goroutines
以并发方式运行的应用程序部分称为goroutines。Goroutines和通道用于结构化并发程序。 进程是在内存中以自己的地址空间运行的独立执行实体。一个进程拥有同时执行的线程。线程共享进程的地址空间。
Goroutines是轻量级的,比线程轻得多。Goroutines在相同的地址空间中运行,因此对共享内存的访问必须进行同步;可以使用sync包来实现,但建议使用通道来同步goroutines。
Goroutine以函数或方法的形式实现。可以使用"go"关键字调用(调用)它。当goroutine完成时,不会返回任何内容给调用函数。
Go并发示例
package main
import (
"fmt"
"time"
"sync"
)
var wg = sync.WaitGroup{}
func main() {
wg.Add(2)
go fun1()
go fun2()
wg.Wait()
}
func fun1(){
for i:=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()
}
输出:
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