Skip to content

Commit 2c45df9

Browse files
committed
20220405
1 parent 0cdb23e commit 2c45df9

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ ps:白天上班,晚上更新,尽量日更,比心
5353

5454
[第19章 依赖管理](https://github.com/java-aodeng/golang-examples/blob/master/src/go-19/module_package/get_remote_pack_test.go)
5555

56-
第20章 协程机制
56+
> 并发编程,学go的目的开始了,前面都是基础
57+
58+
[第20章 协程机制](https://github.com/java-aodeng/golang-examples/blob/master/go-20/groutine_test.go)
5759

5860
第21章 共享内存并发机制
5961

go-20/groutine_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package go_20
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
"time"
7+
)
8+
9+
/*
10+
11+
协程机制
12+
就是一种更轻量级的线程
13+
其实你可以理解为java的多线程编程,只不过性能处理更加好
14+
15+
java Thead 对比 go Groutine
16+
## 创建时默认的stack(栈)的大小
17+
1.jdk5以后java thread stack默认为1M
18+
2.Groutine的stack初始大小为2k(这也就是为什么go语言比java更适合并发编程了)
19+
20+
## 和KSE(kernel space entity 系统线程)的对应关系
21+
1.java thread是1:1
22+
2.Groutine是M:N(多对多,所以go天生就是用来处理并发的)
23+
24+
*/
25+
26+
//测试
27+
func TestGroutine(t *testing.T) {
28+
for i := 0; i < 10; i++ {
29+
// 创建协程,如下写一个go就行了
30+
go func(i int) {
31+
fmt.Println(i)
32+
}(i) //这里i是值传递,每次都是复制一个,所以不会存在共享变量,需要像java加锁一样的问题,所以go天生并发
33+
}
34+
time.Sleep(time.Millisecond * 50)
35+
}
36+
37+
/*
38+
运行结果 结果顺序不一样,和java多线程一样理解就行了
39+
=== RUN TestGroutine
40+
2
41+
0
42+
5
43+
3
44+
4
45+
1
46+
7
47+
6
48+
8
49+
9
50+
--- PASS: TestGroutine (0.05s)
51+
PASS
52+
*/

0 commit comments

Comments
 (0)