goroutine

Golang

goroutine
我自己理解goroutine 就很类似其他语言的thread[备注1],只是特别的地方是go 用 goroutine很简易的方式去让开发者 实现多执行绪[备注2]程序

来点范例

package main

import (
        "fmt"
        "time"
)

func say(s string) {
        for i := 0; i < 5; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Println(s)
        }
}

func main() {
        go say("a")
	//say("a")
        say("b")
}

这对於比较常写PHP的我,真的实在太惊人了!!!!!

Channel

Goroutine的沟通主要可以透过channel、全域变数进行操作。

package main

import (
        "fmt"
        "time"
)

func say(s string, val  chan int) {
        for i := 0; i < 2; i++ {
                time.Sleep(100 * time.Millisecond)
                 fmt.Printf("say %s \n" ,s)

        }
val <- 1 //注入资料1
}
func say2(s string, val  chan int) {
        for i := 0; i < 2; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Printf("say2 %s \n" ,s)

        }
val <- 2 //注入资料1
}

func main() {
val := make(chan int)
        go say("a", val )
        go say2("a", val )
	x := <-val  // receive from c

	fmt.Println(x)
}

直接来改看看,虽然这支是没啥意义的程序,但可以看得出来是共享x,然後多跑几次就会发现谁抢赢谁抢输了

备注:

  1. 执行绪(英语:thread)是作业系统能够进行运算排程的最小单位。 大部分情况下,它被包含在行程之中,是行程中的实际运作单位。 一条执行绪指的是行程中一个单一顺序的控制流,一个行程中可以并行多个执行绪,每条执行绪并列执行不同的任务。 ... 执行绪是独立排程和分派的基本单位。 来源wiki维基百科。
  2. 一个Process可以向作业系统取得多个执行绪(threads),多个执行绪可以达到类似平行处理的效果。

参考资料
https://zh.wikipedia.org/zh-tw/%E7%BA%BF%E7%A8%8B


<<:  序章:最幸福的事,莫过於当你看到code变成一幅幅美丽的画

>>:  Day08. 後疫情的新常态,运用Blue Prism「超前布署」好运自创-BP从Excel新建一个工作表

认识CSS(八):CSS BOX模型

CSS box model 盒子模型也称为区块模型,主要是将传统的HTML区块概念再进一步的规范。我...

GitHub Action 实作持续交付 - 部署至 Azure App Service

可以 ASP.NET Core 网站部署的环境相当多,包含 IIS, Nginx, App serv...

Day16-Kubernetes 那些事 - Resource Quotas

前言 昨天的文章讲完 Deployment 以及 ReplicaSet 後相信大家应该对於如何产生更...

[Day 3] Course 1_Foundation - Data Analytics 介绍

《30天带你上完 Google Data Analytics Certificate 课程》系列将...

CSS就可以!animation 与他的好夥伴 @keyframes

如果说HTML是网页开发的第一堂课,CSS差不多就会再第二堂课出现了,好消息是,只要用第二堂学到的语...