zoukankan      html  css  js  c++  java
  • Go语言的goroutine

    Go世界里,每一个并发执行的活动成为goroutine。

    通过创建goroutine,就可以实现并行运算,十分方便。

    如果有函数f(),那么:

    f():调用函数f(),并且等待它返回

    go f():新建一个调用f()的goroutine,不等待


    Go语言程序:

    // fib project main.go
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	go spinner(1000 * time.Millisecond)
    
    	const n = 46
    	fibN := fib(n) // slow
    	fmt.Printf("
    Fibonacci(%d) = %d
    ", n, fibN)
    }
    
    func spinner(delay time.Duration) {
    	for {
    		for i, r := range "abcd" {
    			fmt.Printf("%d: %c
    ", i, r)
    			time.Sleep(delay)
    		}
    	}
    }
    
    func fib(x int64) int64 {
    	if x < 2 {
    		return x
    	}
    	return fib(x-2) + fib(x-1)
    }


    运行结果:

    0: a
    1: b
    2: c
    3: d
    0: a
    1: b
    2: c
    3: d
    0: a
    1: b
    2: c
    3: d
    0: a
    1: b
    2: c
    3: d
    0: a
    1: b
    2: c
    3: d
    0: a
    1: b
    2: c
    3: d
    0: a
    
    Fibonacci(46) = 1836311903

    程序说明:

    1.函数spinner()是个死循环,循环输出字符串中的一个字符,然后进入睡眠状态1秒钟

    2.函数fib()是递归算法的计算程序,非常慢,尤其是调查用时代入的参数是46,实际运行实际大概是25秒

    3.函数main()结束时,会强制终结所有的goroutine,然后退出程序


  • 相关阅读:
    第十二周工作总结
    第八周工作总结
    冲刺2
    冲刺1
    用户场景分析
    用户场景分析
    水王在哪
    课堂练习-4个数的和
    《大道至简》第一章读后感
    ELF Format 笔记(三)—— Section Types
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563552.html
Copyright © 2011-2022 走看看