💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 并行和并发 >并行,同一时刻,多条指令在多个处理器上同时执行 >并发,同一时刻只能执行一条指令,但是多个指令在这一条指令得基础上交替执行。 ![](https://img.kancloud.cn/9c/12/9c1238beeff621ff9cd4e453e7034ceb_667x478.png) ### goroutine >每一个并发执行单元叫做goroutine(协程),调用方法 > **go 函数名 (函数参数)** >使用go关键词就不能使用函数返回值来进行数据交换,只能使用channel(渠道) ``` package main import ( "fmt" "time" ) // 创建子线程 Task1 func Task1() { // for 循环间隔打印 for { fmt.Println(time.Now().Format("15:04:05"), "正在处理子线程Task1任务") // 间隔时间 time.Sleep(time.Second * 3) } } // 创建子线程 Task2 func Task2() { for { fmt.Println(time.Now().Format("15:04:05"), "正在处理子线程Task2任务") time.Sleep(time.Second * 1) } } // 主线程 func main() { // 执行两个子线程 go Task1() go Task2() // 主线程任务 for { fmt.Println(time.Now().Format("15:04:05"), "正在处理主线程任务") time.Sleep(time.Second * 2) } } ``` ``` 15:36:51 正在处理主线程任务 15:36:51 正在处理子线程Task1任务 15:36:51 正在处理子线程Task2任务 15:36:52 正在处理子线程Task2任务 15:36:53 正在处理子线程Task2任务 ... ``` main函数内需要有一些代码逻辑,否则就会报错,或者就是跳出程序。 创建10个线程,这里有点像python ``` package main import ( "fmt" "time" ) func write(ints int) { fmt.Println("写", ints) } func main() { for i := 0; i < 10; i++ { go write(i) } time.Sleep(time.Second * 5) } ``` ### 使用匿名函数创建goroutine ``` go func(参数列表) { 函数体 } (调用参数列表 ) ``` ``` package main import ( "fmt" "time" ) func main() { go func() { for { fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "正在处理子线程任务1") time.Sleep(time.Second * 3) } }() go func() { for { fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "正在处理子线程任务2") time.Sleep(time.Second * 1) } }() time.Sleep(time.Second * 100) } ```