zoukankan      html  css  js  c++  java
  • 无缓冲通道 vs 有缓冲通道

    无缓冲通道 vs 有缓冲通道

    1. 无缓冲通道,在通道满了之后就会阻塞所在的goroutine。(需要在其他goroutine中取出该通道中的元素,才能解除它所在通道的阻塞,不然就会一直阻塞下去。)
    2. 有缓冲通道,存完了东西可以不取出来,不会阻塞。
    // 无缓冲通道,阻塞示例
    func chanWillLock() {
    	chanNo := make(chan int) // 无缓冲
    	fmt.Println("1000")
    	// 到这一行就会一直阻塞,
    	// 除非有其他的goroutine中有取走它里面存的东西。
    	chanNo <- 1
    	fmt.Println("2000")
    }
    
    // 无缓冲通道,解除阻塞
    func chanWillUnlockAfter3S() {
    	chanNo := make(chan int)
    	go func() {
    		// 等待
    		time.Sleep(time.Second * 3)
    		// 取出东西,
    		// 之后就会结束chanNo所在的goroutine的阻塞。
    		_ = <-chanNo
    	}()
    	fmt.Println("开始阻塞")
    	// 到这里会阻塞
    	chanNo <- 1000
    	fmt.Println("主 goroutine 退出")
    }
    
    // 有缓冲通道,阻塞示例
    func chanDemo3() {
    	chan1 := make(chan int, 3)
    	fmt.Println("开始")
    	chan1 <- 100
    	chan1 <- 200
    	chan1 <- 300
    	// 容量满了,再放入400的时候才会造成阻塞。
    	//chan1 <- 400
    	fmt.Println("结束")
    }
    
  • 相关阅读:
    将16进制的颜色转为rgb颜色
    css3选择
    css写复选框
    关于瀑布流
    关于CSS3属性transition的触发
    单行文本两端对齐
    jQuery插件——下拉选择框
    CSS3帧动画
    Vuejs自定义全局组件--loading
    Sublime text开发Quick-Cocos2d-x-3.x环境搭建(Windows)
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/14435718.html
Copyright © 2011-2022 走看看