• go语言之进阶篇创建goroutine协程


    1、goroutine是什么

      goroutine是Go并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。

    2、创建goroutine协程

      只需在函数调⽤语句前添加 go 关键字,就可创建并发执⾏单元。开发⼈员无需了解任何执⾏细节,调度器会自动将其安排到合适的系统线程上执行。

      在并发编程里,我们通常想讲一个过程切分成几块,然后让每个goroutine各自负责一块工作。当一个程序启动时,其主函数即在一个单独的goroutine中运行,我们叫它main goroutine。新的goroutine会用go语句来创建。

    示例:

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func newTask() {
    	for {
    		fmt.Println("this is a newTask")
    		time.Sleep(time.Second) //延时1s
    	}
    }
    
    func main() {
    
    	go newTask() //新建一个协程, 新建一个任务
    
    	for {
    		fmt.Println("this is a main goroutine")
    		time.Sleep(time.Second) //延时1s
    	}
    }
    

    执行结果:

    this is a main goroutine
    this is a newTask
    this is a newTask
    this is a main goroutine
    this is a newTask

     原理图:

      

  • 相关阅读:
    SharedPreferences
    Handler
    Gallery 和ImageSwitcher
    poj 1077 Eight (BFS)
    HDU 1208 Pascal's Travels( 记忆化搜索)
    HDU 1619 Unidirectional TSP (dp,dfs)
    HDU 3683 Gomoku (枚举+BFS)
    HDU 3647 Tetris (暴力DFS)
    poj 1020 Anniversary Cake (DFS)
    poj 1375 Intervals(解析几何 过圆外一点求与圆的切线)
  • 原文地址:https://www.cnblogs.com/nulige/p/10272189.html
Copyright © 2020-2023  润新知