.并发性、并行性
Concurrency并发性
同时可以执行多条路径,但是同一时间点上,只能执行1个。
parallelism并行性
多条路径同时执行,真正的并行多核支持。
2.进程,线程,协程-->多任务
进程process:正在执行的程序。
线程thread:进程中的一条执行路径。。
协程coroutine:轻量级的线程。 高并发
3.go语言中的goroutine,就是go的协程的实现。
4.启动goroutine,
go关键字,创建并启动协程,一条执行路径
go 函数调用
启动了goroutien,执行指定的函数,函数执行结束,意味着该goroutine结束了。如果函数有返回值,那么也会被舍弃的。
5.main goroutine,当程序执行的时候,自动创建并启动了main goroutine,执行main(),如果程序中有多条goroutine,并发执行,如果main goroutine结束,那么其他的子goroutine也会结束,我们不让主mian函数Goroutien结束的方法有以下三种。
A:time.Sleep()
B:同步等待组:sync包的WaitGroup
要执行的子goroutine,需要通过Add(2)
main中wait(),表示main goroutine进入等待状态,相当于阻塞,暂时不执行。直到WaitGroup中的子goroutine执行完毕,解除阻塞。
每当子goroutine,调用Done(),表示减。
C:通道:Channel,王道
Concurrency并发性
同时可以执行多条路径,但是同一时间点上,只能执行1个。
parallelism并行性
多条路径同时执行,真正的并行多核支持。
2.进程,线程,协程-->多任务
进程process:正在执行的程序。
线程thread:进程中的一条执行路径。。
协程coroutine:轻量级的线程。 高并发
3.go语言中的goroutine,就是go的协程的实现。
4.启动goroutine,
go关键字,创建并启动协程,一条执行路径
go 函数调用
启动了goroutien,执行指定的函数,函数执行结束,意味着该goroutine结束了。如果函数有返回值,那么也会被舍弃的。
5.main goroutine,当程序执行的时候,自动创建并启动了main goroutine,执行main(),如果程序中有多条goroutine,并发执行,如果main goroutine结束,那么其他的子goroutine也会结束,我们不让主mian函数Goroutien结束的方法有以下三种。
A:time.Sleep()
B:同步等待组:sync包的WaitGroup
要执行的子goroutine,需要通过Add(2)
main中wait(),表示main goroutine进入等待状态,相当于阻塞,暂时不执行。直到WaitGroup中的子goroutine执行完毕,解除阻塞。
每当子goroutine,调用Done(),表示减。
C:通道:Channel,王道
package main import ( "fmt" "time" ) func main() { go test1() go test2() time.Sleep(5*time.Second) } //打印数字 func test1() { for i:=1;i<=10000;i++{ fmt.Println("test1函数中i:。。。", i) } } //打印数字 func test2() { for j:=1;j<=10000;j++{ fmt.Println("\ttest2函数中j:",j) } }
这就是一个很典型的并发,大家可以自行去试试执行结果,为了不让main函数结束