### 并行和并发
>并行,同一时刻,多条指令在多个处理器上同时执行
>并发,同一时刻只能执行一条指令,但是多个指令在这一条指令得基础上交替执行。
![](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)
}
```
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理