zoukankan      html  css  js  c++  java
  • GO语言练习:channel 缓冲机制

    1、代码

    2、运行

    3、解析


    1、代码 buffer.go

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "time"
     6 )
     7 
     8 func readThread(ch chan int) {
     9     fmt.Println("read for reading...")
    10     for i := range ch {
    11         fmt.Println("get i : ", i)
    12         if 20 == i { 
    13             break
    14         }   
    15         time.Sleep(1e8)
    16     }   
    17     fmt.Println("read over...")
    18 }
    19 
    20 func main() {
    21     ch := make(chan int, 1024)
    22     go readThread(ch)
    23     time.Sleep(1e9 * 2)
    24     for i := 1; i <= 20; i++ {
    25         ch <- i
    26     }
    27     fmt.Println("waitting for reading...")
    28     time.Sleep(1e9 * 3)
    29     fmt.Println("over...")
    30 }

    2、运行

     1 $ go run buffer.go 
     2 read for reading...
     3 waitting for reading...
     4 get i :  1
     5 get i :  2
     6 get i :  3
     7 get i :  4
     8 get i :  5
     9 get i :  6
    10 get i :  7
    11 get i :  8
    12 get i :  9
    13 get i :  10
    14 get i :  11
    15 get i :  12
    16 get i :  13
    17 get i :  14
    18 get i :  15
    19 get i :  16
    20 get i :  17
    21 get i :  18
    22 get i :  19
    23 get i :  20
    24 read over...
    25 over...

    3、解析

      根据运行结果进行分析:

      1)先运行的readThread读线程,读线程已经做好了读的准备,但此时channel中还没有数据,所以阻塞了。等待读动作。

      2)主线程中,一次性向channel中写入大量数据,由于有缓冲机制,所以可以一次性的写入多个数据而不会阻塞。当主线程写完了数据,就开始等待读线程的读动作结束。

      3)channel中开始有数据,读线程开始读数据,每0.1秒钟读取一个数据,一共读取20次。读取结束了,打印read over。

      4)主线程等待的时间到了,返回,退出

  • 相关阅读:
    hdu--1045--Fire Net,NYOJ--587--dfs--blockhouses
    NYOJ--1100--WAJUEJI which home strong!
    NYOJ--927--dfs--The partial sum problem
    NYOJ--1058--dfs--部分和问题
    NYOJ--491--dfs(打表水过)--幸运三角形
    素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem
    NYOJ--353--bfs+优先队列--3D dungeon
    NYOJ--325--深度优先搜索--zb的生日
    NYOJ--284--广搜+优先队列--坦克大战
    搭建虚拟环境
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4656347.html
Copyright © 2011-2022 走看看