go学习笔记3-协程和线程对比

在B站上看了一个视频,讲了协程和线程在运行机制上有一些不同,线程运行中会因为操作系统的调度而失去时间片,协程运行过程中是不会受到影响的,除非协程的业务代码主动让出CPU执行权或者遇到io阻塞,接下来用线程和协程实现同样功能来对比一下两者之间的区别,线程的代码我用java写,但是运行结果出乎我的意料,恰恰相反,多线程版本的执行完一个线程再执行下一个,而多个协程是交错执行的,我是见了鬼吗?

一.java多线程版本

1.代码

/**
 * @ClassName: ThreadTest
 * @description: 多线程测试
 * @author: leijing
 * @Date: 2019/4/20 下午10:04
 * @Version: 1.0
 */
public class ThreadTest {
    public static void main(String[] args) {
        new Thread(new Task("task1")).run();
        new Thread(new Task("task2")).run();
    }
}
class Task extends Thread {
    private String name;
    public Task(String name){
        this.name = name;
    }
    @Override
    public void run() {

        for (int i = 0 ; i < 100; i++){
            System.out.println(name+" "+i);
        }
    }
}

2.运行结果


task1 0
task1 1
task1 2
task1 3
task1 4
task1 5
task1 6
task1 7
task1 8
task1 9
task1 10
task1 11
task1 12
task1 13
task1 14
task1 15
task1 16
task1 17
task1 18
task1 19
task1 20
task1 21
task1 22
task1 23
task1 24
task1 25
task1 26
task1 27
task1 28
task1 29
task1 30
task1 31
task1 32
task1 33
task1 34
task1 35
task1 36
task1 37
task1 38
task1 39
task1 40
task1 41
task1 42
task1 43
task1 44
task1 45
task1 46
task1 47
task1 48
task1 49
task1 50
task1 51
task1 52
task1 53
task1 54
task1 55
task1 56
task1 57
task1 58
task1 59
task1 60
task1 61
task1 62
task1 63
task1 64
task1 65
task1 66
task1 67
task1 68
task1 69
task1 70
task1 71
task1 72
task1 73
task1 74
task1 75
task1 76
task1 77
task1 78
task1 79
task1 80
task1 81
task1 82
task1 83
task1 84
task1 85
task1 86
task1 87
task1 88
task1 89
task1 90
task1 91
task1 92
task1 93
task1 94
task1 95
task1 96
task1 97
task1 98
task1 99
task2 0
task2 1
task2 2
task2 3
task2 4
task2 5
task2 6
task2 7
task2 8
task2 9
task2 10
task2 11
task2 12
task2 13
task2 14
task2 15
task2 16
task2 17
task2 18
task2 19
task2 20
task2 21
task2 22
task2 23
task2 24
task2 25
task2 26
task2 27
task2 28
task2 29
task2 30
task2 31
task2 32
task2 33
task2 34
task2 35
task2 36
task2 37
task2 38
task2 39
task2 40
task2 41
task2 42
task2 43
task2 44
task2 45
task2 46
task2 47
task2 48
task2 49
task2 50
task2 51
task2 52
task2 53
task2 54
task2 55
task2 56
task2 57
task2 58
task2 59
task2 60
task2 61
task2 62
task2 63
task2 64
task2 65
task2 66
task2 67
task2 68
task2 69
task2 70
task2 71
task2 72
task2 73
task2 74
task2 75
task2 76
task2 77
task2 78
task2 79
task2 80
task2 81
task2 82
task2 83
task2 84
task2 85
task2 86
task2 87
task2 88
task2 89
task2 90
task2 91
task2 92
task2 93
task2 94
task2 95
task2 96
task2 97
task2 98
task2 99

二.go多协程版本

1.代码

package main

import "fmt"
import "time"

func task(name string) {
	for i := 0; i < 100; i++ {
		fmt.Printf("%s %d\n", name, i)
	}
}

func main() {
	go task("task1")
	go task("task2")
	time.Sleep(time.Second)
}

2.运行结果

task2 0

task2 1

task1 0

task2 2

task2 3

task2 4

task2 5

task2 6

task2 7

task1 1

task1 2

task1 3

task1 4

task1 5

task2 8

task2 9

task2 10

task2 11

task2 12

task2 13

task2 14

task2 15

task2 16

task2 17

task2 18

task2 19

task2 20

task2 21

task2 22

task2 23

task2 24

task2 25

task2 26

task2 27

task2 28

task2 29

task2 30

task1 6

task1 7

task1 8

task2 31

task2 32

task2 33

task1 9

task1 10

task1 11

task2 34

task2 35

task2 36

task1 12

task1 13

task1 14

task1 15

task1 16

task1 17

task1 18

task1 19

task1 20

task1 21

task1 22

task2 37

task1 23

task1 24

task1 25

task1 26

task1 27

task1 28

task1 29

task1 30

task1 31

task1 32

task1 33

task1 34

task1 35

task1 36

task1 37

task1 38

task1 39

task1 40

task1 41

task1 42

task1 43

task1 44

task1 45

task1 46

task1 47

task2 38

task2 39

task2 40

task2 41

task2 42

task2 43

task2 44

task2 45

task2 46

task1 48

task1 49

task1 50

task1 51

task1 52

task1 53

task1 54

task1 55

task2 47

task1 56

task1 57

task1 58

task1 59

task1 60

task1 61

task1 62

task1 63

task2 48

task2 49

task1 64

task1 65

task1 66

task1 67

task1 68

task1 69

task1 70

task1 71

task1 72

task2 50

task2 51

task2 52

task2 53

task2 54

task2 55

task2 56

task2 57

task2 58

task2 59

task2 60

task1 73

task1 74

task2 61

task2 62

task2 63

task1 75

task1 76

task1 77

task1 78

task2 64

task2 65

task2 66

task2 67

task2 68

task2 69

task2 70

task2 71

task2 72

task2 73

task2 74

task2 75

task2 76

task2 77

task2 78

task2 79

task2 80

task2 81

task2 82

task2 83

task1 79

task1 80

task1 81

task1 82

task1 83

task1 84

task1 85

task1 86

task1 87

task1 88

task1 89

task2 84

task2 85

task2 86

task2 87

task2 88

task2 89

task2 90

task2 91

task2 92

task2 93

task2 94

task2 95

task2 96

task2 97

task2 98

task2 99

task1 90

task1 91

task1 92

task1 93

task1 94

task1 95

task1 96

task1 97

task1 98

task1 99

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值