## 一、概念
* 只需要在语句前添加go关键字,就可以创建并发执行单元
* 开发⼈员无需了解任何执⾏细节,调度器会自动将其安排到合适的系统线程上执行
* 如果主协程退出了,其他任务不在执行
## 一、创建协程
~~~
package main
import (
"fmt"
"time"
)
//子协程
func newTask() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}
func main() {
//启动子协程
go newTask()
i := 0
for {
i++
fmt.Printf("main goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}
~~~
注意:子协程和主协程不相关
## 二、如果主协程退出了,其他任务不在执行
~~~
package main
import (
"fmt"
"time"
)
func main() {
go func() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}()
i := 0
for {
i++
fmt.Printf("main goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
if i == 2 {
break
}
}
}
~~~
## 三、main函数中只有协程不会执行代码
~~~
package main
import (
"fmt"
"time"
)
func main() {
go func() {
i := 0
for {
i++
fmt.Printf("new goroutin:i=%d\n", i)
time.Sleep(1 * time.Second)
}
}()
}
~~~
执行结果:
- 一、数组
- 二、切片
- 三、copy
- 四、MAP
- 五、结构体
- 六、结构体参数
- 七、面向”对象“
- 1、匿名字段
- 2、方法
- 3、包和封装
- 4、接口
- 5、异常处理
- 八、Json
- 九、文件操作
- 1、写文件
- 2、读取文件内容
- 3、拷贝文件
- 十、反射
- 1、查看类型,字段和方法
- 2、查看匿名字段
- 3、修改基本类型的值
- 4、修改结构体的值
- 5、调用方法
- 十一、并发编程
- 1、并行和并发
- 2、协程
- 3、runtime包
- 5、channel的使用
- 6、close
- 7、定时器
- 8、select
- 9、协程同步锁
- 十二、socket编程
- 十三、Http编程
- 十四、并发爬虫和数据处理
- 1、简易爬虫实例
- 2、并发爬取图片
- 3、读文件中的数据
- 4、数据清洗
- 其他
- 1、推荐文章