基础
- 并发:电脑同时听歌,看小说,打游戏。cpu根据时间片进行划分,交替执行这三个程序。我们可以感觉是同时产生的。
- 并行:多个cpu(多核)上述动作同时执行
- C语言:,实现并发过程使用的是多线程(C++的最小资源单元)
- Golang:Golang中不是线程,而是
Go程
(goroutine),Go程是Golang原生支持的,每一个Go程占用的系统资源,远远小于线程,一个Go程大约需要4k到5k的内存资源,一个程序可以启动大量的Go程序。相同的资源下,线程启动几十个,那么Go程是可以启动成百上千个。Go程对于高并发,性能非常好
- Golang启动Go程,只需要在函数前面加上关键字
go
即可
- 启动多个子Go程它们会竞争cpu资源
package main
import (
"fmt"
"time"
)
func main() {
go func() {
count := 1
for {
fmt.Println("======>我是子go程:", count)
count++
time.Sleep(time.Second)
}
}()
count := 1
for {
fmt.Println("我是主go程:", count)
count++
time.Sleep(time.Second)
}
}
![image](https://i-blog.csdnimg.cn/blog_migrate/dcad2769e7b7d227ee9f0fcd5c933fc7.png)
return、exit、goexit区别
- return:返回当前函数
- exit:退出当前进程
- goexit:提前退出当前go程
return
package main
import (
"fmt"
"time"
)
func main() {
go func() {
func(){
fmt.Println("这是子go程的内部函数")
return
}()
fmt.Println("子go程结束")
}()
fmt.Println("这是主go程")
time.Sleep(5 * time.Second)
fmt.Println("over")
}
![image](https://i-blog.csdnimg.cn/blog_migrate/c31a53ab7d660e180c669d138969a15f.png)
exit
package main
import (
"fmt"
"os"
"time"
)
func main() {
go func() {
func(){
fmt.Println("这是子go程的内部函数")
os.Exit(-1)
}()
fmt.Println("子go程结束")
}()
fmt.Println("这是主go程")
time