From dcf302e5953b2c3ef7a26a1732811a054381f87a Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Mon, 26 Sep 2022 22:43:56 +0800 Subject: [PATCH] fix --- blog/golang/golang-concurrency.md | 129 ++++++++++++++++++++++++++++++ blog/golang/index.md | 15 ++-- 2 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 blog/golang/golang-concurrency.md diff --git a/blog/golang/golang-concurrency.md b/blog/golang/golang-concurrency.md new file mode 100644 index 0000000..5c54dc8 --- /dev/null +++ b/blog/golang/golang-concurrency.md @@ -0,0 +1,129 @@ +# 第二十章 golang 并发编程 + +## golang 并发编程之协程 + +共语言中的并发是`函数`相互独立运行的能力。goroutines 是并发运行的函数 + +创建协程 + +```go +go task() +``` + +示例 1 + +```go +package main + +import ( + "fmt" + "time" +) + +func showMessage(message string) { + for i := 0; i < 5; i++ { + fmt.Println(message) + time.Sleep(time.Millisecond * 100) + } +} + +func main() { + showMessage("Tom") + showMessage("Jack") +} + +``` + +输出 + +``` +Tom +Tom +Tom +Tom +Tom +Jack +Jack +Jack +Jack +Jack +``` + +```go +func main() { + go showMessage("Tom") + showMessage("Jack") +} +``` + +输出 + +```go +Jack +Tom +Tom +Jack +Jack +Tom +Tom +Jack +Jack +Tom +``` + +示例 2 + +```go +package main + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" + "time" +) + +func responseSize(url string) { + fmt.Println("step1: ", url) + response, err := http.Get(url) + if err != nil { + log.Fatal(err) + } + + fmt.Println("step2: ", url) + defer response.Body.Close() + + fmt.Println("step3: ", url) + body, err := ioutil.ReadAll(response.Body) + if err != nil { + log.Fatal(err) + } + fmt.Println("step4: ", len(body)) +} + +func main() { + go responseSize("https://www.baidu.com/") + go responseSize("https://www.jd.com/") + go responseSize("https://www.taobao.com/") + time.Sleep(time.Second * 10) +} + +``` + +输出 + +``` +step1: https://www.baidu.com/ +step1: https://www.jd.com/ +step1: https://www.taobao.com/ +step2: https://www.jd.com/ +step3: https://www.jd.com/ +step4: 160260 +step2: https://www.baidu.com/ +step3: https://www.baidu.com/ +step4: 227 +step2: https://www.taobao.com/ +step3: https://www.taobao.com/ +step4: 87347 +``` diff --git a/blog/golang/index.md b/blog/golang/index.md index 121aa17..a8faa83 100644 --- a/blog/golang/index.md +++ b/blog/golang/index.md @@ -16,15 +16,15 @@ [第四章 Golang 项目管理](/blog/golang/golang-project.md) -[第五章 Golang标识符、关键字、命名规则](blog/golang/golang-identifier.md) +[第五章 Golang标识符、关键字、命名规则](/blog/golang/golang-identifier.md) -[第六章 Golang变量](blog/golang/golang-variable.md) +[第六章 Golang变量](/blog/golang/golang-variable.md) -[第七章 Golang 常量](blog/golang/golang-constant.md) +[第七章 Golang 常量](/blog/golang/golang-constant.md) -[第八章 Golang 数据类型](blog/golang/golang-type.md) +[第八章 Golang 数据类型](/blog/golang/golang-type.md) -[第九章 Golang 格式化输出](blog/golang/golang-format.md) +[第九章 Golang 格式化输出](/blog/golang/golang-format.md) [第十章 Golang 运算符](/blog/golang/golang-operator.md) @@ -46,7 +46,10 @@ [第十九章 Golang包 package](/blog/golang/golang-package.md) +[第二十章 golang 并发编程](/blog/golang/golang-concurrency.md) + https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da -https://www.bilibili.com/video/BV1zR4y1t7Wj?p=67&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file + +https://www.bilibili.com/video/BV1zR4y1t7Wj/?p=68&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da \ No newline at end of file -- GitLab