File tree Expand file tree Collapse file tree 2 files changed +55
-1
lines changed Expand file tree Collapse file tree 2 files changed +55
-1
lines changed Original file line number Diff line number Diff line change @@ -53,7 +53,9 @@ ps:白天上班,晚上更新,尽量日更,比心
53
53
54
54
[ 第19章 依赖管理] ( https://github.com/java-aodeng/golang-examples/blob/master/src/go-19/module_package/get_remote_pack_test.go )
55
55
56
- 第20章 协程机制
56
+ > 并发编程,学go的目的开始了,前面都是基础
57
+
58
+ [ 第20章 协程机制] ( https://github.com/java-aodeng/golang-examples/blob/master/go-20/groutine_test.go )
57
59
58
60
第21章 共享内存并发机制
59
61
Original file line number Diff line number Diff line change
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
+ */
You can’t perform that action at this time.
0 commit comments