本篇文章主要为Go语言 Go程基础内容介绍及代码示例。
目录
并发与并行
并发:电脑同时听歌,看小说,看电影。cpu根据时间片进行划分,交替执行这个三个程序。
我们人可以感觉是同时产生的。
并行:多个CPU(多核)同时执行
Go程介绍
c语言里面实现并发过程使用的是多线程(C++的最小资源单元),进程
go语言里面不是线程,而是go程 ==> goroutine
go程是go语言原生支持的
每一个go程占用的系统资源远远小于线程,
一个go程大约需要4K-5K的内存资源
一个程序可以启动大量的go程
线程:启动几十个
go程:可以启动成百上千个,对于实现高并发,性能非常好
只需要在目标函数前加上go即可
简单go程示例
启动一个主go程和一个子go程。
示例如下:
package main
import (
"fmt"
"time"
)
func main() {
// 启动子go程
go display()
// 主go程
count := 1
for{
fmt.Println("这是主go程:", count)
count++
time.Sleep(1 * time.Second)
}
}
// 这个将用于子go程使用
func display() {
count := 1
for {
fmt.Println(" ======> 这是子go程:", count)
count++
time.Sleep(1 * time.Second)
}
}
运行结果:
这是主go程: 1
======> 这是子go程: 1
======> 这是子go程: 2
这是主go程: 2
======> 这是子go程: 3
这是主go程: 3
这是主go程: 4
======> 这是子go程: 4
======> 这是子go程: 5
这是主go程: 5
匿名函数写法
把刚才的简单go程示例改为匿名函数写法。
示例如下:
package main
import (
"fmt"
"time"
)
func main() {
// 启动子go程
go func() {
count := 1
for {
fmt.Println(" ======> 这是子go程:", count)
count++
time.Sleep(1 * time.Second)
}
}()
count := 1
for {
fmt.Println("这是主go程:", count)
count++
time.Sleep(1 * time.Second)
}
}
启动多个子go进程
在原来的基础上,使用for循环,启动多个子进程。
示例如下:
package main
import (
"fmt"
"time"
)
// 这个将用于子go程使用
func displays(num int) {
count := 1
for {
fmt.Println(" ======> 这是子go程:", num, "当前count:", count)
count++
time.Sleep(1 * time.Second)
}
}
func main() {
// 启动子go程
for i := 0; i < 3; i++ {
go displays(i)
}
count := 1
for {
fmt.Println("这是主go程:", count)
count++
time.Sleep(1 * time.Second)
}
}
运行结果:
这是主go程: 1
======> 这是子go程: 2 当前count: 1
======> 这是子go程: 0 当前count: 1
======> 这是子go程: 1 当前count: 1
这是主go程: 2
======> 这是子go程: 1 当前count: 2
======> 这是子go程: 2 当前count: 2
======> 这是子go程: 0 当前count: 2
======> 这是子go程: 0 当前count: 3
======> 这是子go程: 1 当前count: 3
======> 这是子go程: 2 当前count: 3
这是主go程: 3
总结
本篇文章主要为Go语言 Go程基础内容介绍及代码示例。