《7天学会Go并发编程》の第二天 写一个简单的Go并发程序以及Goroutine的使用

《7天学会Go并发编程》の第二天 写一个简单的Go并发程序以及Goroutine的使用,第1张

作者简介:二线厂在职大数据开发工程师。🐴🐴想和从事大数据开发的同学们多多交流~

🚗🚗🚗🚗明目张胆的摆烂,暗无声息的学习。

😁😁有用或者有帮助的话,就一箭三抖。

目录

一、如何写一个简单的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线程执行任务💪🏻⛽️~

🧧🧧🧧感谢诸位大佬的阅读,点个关注,收藏一下呗~

    

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/989726.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存