zoukankan      html  css  js  c++  java
  • goroutine使用

    Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法。相比于线程,它的创建和销毁的代价要小很多,并且它的调度是独立于线程的。在golang中创建一个goroutine非常简单,使用“go”关键字即可:

    Goroutine与线程的区别

    许多人认为goroutine比线程运行得更快,

    这是一个误解。Goroutine并不会更快,

    它只是增加了更多的并发性。

    当一个goroutine被阻塞(比如等待IO),golang的scheduler会调度其它可以执行的goroutine运行。

    与线程相比,它有以下几个优点:

    内存消耗更少:

    Goroutine所需要的内存通常只有2kb,而线程则需要1Mb(500倍)。

    创建与销毁的开销更小

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func newTask()  {
    	for {
    		fmt.Println("this is a newTask")
    		time.Sleep(time.Second)//延时1s
    	}
    }
    
    
    func main()  {
    	go newTask() //go 关键字就新建一个协程,新建一个任务
    
    	/*for{
    		fmt.Println("this is main goroutine")
    		time.Sleep(time.Second)
    	}*/
    	i := 0
    	for{
            i++
    		fmt.Println("this is main goroutine")
    		time.Sleep(time.Second)
    		if i==2{
    			break
    		}
    
    	}
    
    }
    

      

    package main
    
    import (
    	"fmt"
    	"time"
    )
    //主程序退出 子程序跟着退出,子程序退出需要时间
    func main(){
    	go func() {
    		i := 0
    		for {
    			i++
    			fmt.Println("子协程 i=",i)
    			time.Sleep(time.Second)
    		}
    	}()
    
    	i := 0
    	for{
    		i++
    		fmt.Println("main i=",i)
    		time.Sleep(time.Second)
    		if i == 2{
    			break
    		}
    	}
    }
    

      

  • 相关阅读:
    搭建 springboot selenium 网页文件转图片环境
    洛谷P1352没有上司的舞会-题解
    错误集合
    洛谷P1434滑雪-题解
    洛谷P1278单词游戏-题解
    洛谷P1219八皇后-题解
    洛谷P1443马的遍历-题解
    洛谷P1135奇怪的电梯-题解
    经验集合
    洛谷P1019单词接龙-题解
  • 原文地址:https://www.cnblogs.com/dqh123/p/12076405.html
Copyright © 2011-2022 走看看