作者简介:二线厂在职大数据开发工程师。想和从事大数据开发的同学们多多交流~
明目张胆的摆烂,暗无声息的学习。
有用或者有帮助的话,就一箭三抖。
目录
一、如何写一个简单的go并发程序
二、go语言多线程简单练手任务
2.1 控制台输入并发打印
2.2 goroutine之间的通信
三、总结
一、如何写一个简单的go并发程序
一定要动手写起来,才能学会哟
一定要动手写起来,才能学会哟
go并发程序的编写相对于Java来说,应用十分简单。仅需要在需要并发执行的函数或者方法前加 go关键字就可以,不像Java还需要继承才可以实现并发编程。
在go语言中,线程的的名称是goroutine并不是thread,是因为goroutine 占用内存比较小,属于轻型资源占用,不像thread占用资源比较多,所以起了一个比较独特的名字。
是go并发编程实现:在控制台输入数字之前,启动一个从0开始计数的goroutine。
package main import "fmt" func f(n int) { for i := 0; i < 10; i++ { fmt.Println(n, ":", i) } } func main() { go f(0) var input string fmt.Scanln(&input) }
执行效果:
go 并发编程实现控制台打印文字
下面的代码启动两个goroutline,分别在控制台打印。
package main import "fmt" func main() { go func() { fmt.Println("Goroutine one 开始启动了") }() go func() { fmt.Println("Goroutine two 开始启动了") }() for true { } }
输出:
goroutline one 开始启动了 goroutline two 开始启动了
:这段代码自己跑的话,可以多输入几次。观察一下新开启的线程。
二、go语言多线程简单练手任务
上面的章节主要介绍了如何开启一个并发线程,以及如何使用并发线程打印文字。这一节主要实现在控制台数据输入数字,每输入一个数字开启一个新的线程打印。
2.1 控制台输入并发打印
上面的章节主要介绍了如何开启一个并发线程,以及如何使用并发线程打印文字。这一节主要实现在控制台数据输入数字,每输入一个数字开启一个新的线程打印。
实现控制台并发数字打印
package main import ( "fmt" "strconv" ) func main() { threadIndex:=0 for true { var nameInput string fmt.Scan(&nameInput) go func(name string) { fmt.Println("goroutline +"+ strconv.Itoa(threadIndex)+" 开始启动了"+name) }(nameInput) threadIndex++ } }
zhangsan goroutline +1 开始启动了zhangsan wangsacda goroutline +2 开始启动了wangsacda
效果分析:
通过在控制台阻塞输入,实现每输入一个字符串就能单独开启一个新线程。
语法分析
go func(name string){}("name") 启动一个参数为string类型的函数,最后面的括号实现函数String类型参数的输入。
2.2 goroutine之间的通信
go语言中,有一个名言名句就是通过通信来实现线程之间的数据共享。
实现线程和主线程之间的通信
通过channel实现线程主动告知main goroutline自己的运行状态。与之前程序对比表明,不需要在main goroutline无限循环等待其他线程运行。
package main import "fmt" func main() { ints := make(chan int, 1) go func(chan int) { fmt.Println("goroutline启动了") ints<-1 }(ints) select { case <-ints: fmt.Print("goroutline exits") } }
执行结果:
goroutline启动了 goroutline exits Process finished with the exit code 0
三、总结
今天实现了go语言多线程编码的入门联系,简单地开启了多个go线程执行任务⛽️~
裏裏裏感谢诸位大佬的阅读,点个关注,收藏一下呗~