Go 语言多线程实例

Go 语言多线程实例

本文代码使用了goroutine实现了多线程,使用chan来控制多线程。
runtime.GOMAXPROCS(3)来设置最大的原生线程。
runtime.Gosched() 显式地让出CPU时间给其他goroutine
本文中的runtime.Gosched() 是可以不使用的。
代码如下:

package main

import (
    "fmt"
    "runtime"
)

var quit chan int = make(chan int)

func print10to19() {
    fmt.Println("Start******print10to19 ")
    for i := 10; i < 20; i++ {
        // 显式地让出CPU时间给其他goroutine
        runtime.Gosched()
        fmt.Println("******10to19: ", i)
    }
    fmt.Println("End******print10to19 ")
    quit <- 1
}

func print20to29() {
    fmt.Println("Start======print20to29 ")
    for i := 20; i < 30; i++ {
        // 显式地让出CPU时间给其他goroutine
        runtime.Gosched()
        fmt.Println("======20to29: ", i)
    }
    fmt.Println("End======print20to29 ")
    quit <- 2
}

func print30to39() {
    fmt.Println("Start######print30to39 ")
    for i := 30; i < 40; i++ {
        // 显式地让出CPU时间给其他goroutine
        runtime.Gosched()
        fmt.Println("######30to39: ", i)
    }
    fmt.Println("End######print30to39 ")
    quit <- 0
}

func main() {
    // 设置最大开n个原生线程
    runtime.GOMAXPROCS(3)

    fmt.Println("start ---")
    go print10to19()
    go print20to29()
    go print30to39()
    fmt.Println("start ===")
    for i := 0; i < 3; i++ {
        sc := <-quit
        fmt.Println("sc:", sc)
    }

    fmt.Println("end")
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Goroutine是Go里的一种轻量级线程——协程。相对线程,协程的优势就在于它非常轻量级,进行上下文切换的代价非...
    witchiman阅读 4,933评论 0 9
  • 1. Go 中类线程基础概念 Goroutin概念: Go语言中有个概念叫做goroutine, 这类似我们熟知的...
    孙小兵阅读 6,855评论 0 5
  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 7,393评论 3 87
  • 写在前面的话: 这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小...
    SmartSean阅读 4,803评论 12 45
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,515评论 1 15