golang for thread channel routine consumer and producer

package main

import "time"

func testThread(){
    i:=3
    go func(a int){
        println(a)
        println("this is go func!")
    }(i)

    time.Sleep(1*time.Second)
    println("hello main thread!")
}

func testChannel(){
    //read write channel
    ch:=make(chan int,1)
    ch<-3
    go func(){
        v:=<-ch
        println(v)
    }()
    time.Sleep(1*time.Second)
    println("finish chan!")
}

func producer(p chan<-int){
    for i:=0;i<10;i++{
        p<-i
        println("into chan:",i)
    }
    println("finish the producer!")

}

func consumers(c <-chan int){
    for i:=0;i<10;i++{
        v:=<-c
        println("get from channel:",v)

    }
    println("finish the consumers!!")
}

//test producer and consumer
func testProducerConsumer(){
    ch:=make(chan int,1)
    go consumers(ch)
    go producer(ch)
    time.Sleep(2*time.Second)
    println("finish all the consumer and producer!!")
}

func main() {
    //testThread()
    //testChannel()
    testProducerConsumer()
}

熟悉语法:chan,go多线程

时间: 2025-01-05 15:02:30

golang for thread channel routine consumer and producer的相关文章

golang的缓冲channel简单使用

目录 golang的缓冲channel简单使用 阻塞型 非阻塞 golang的缓冲channel简单使用 我们常用的是无缓冲channel : make(chan type) 其实make() 创建chan的第二个参数可设置缓冲channel的大小. 上述语句等价于 make(chan type, 1) 即创建了一个缓冲区大小为1channel 下面看有缓冲channel的两个例子. 阻塞型 demo : 协程1 :每隔1s 往有10个缓冲的channel里面写一条msg, 协程2:每隔3s 取

Golang并发中channel的分析

问题:面对并发问题,是用channel解决,还是用Mutex解决? 如果自己心里还没有清晰的答案,那就读下这篇文章,你会了解到: 使用channel解决并发问题的核心思路和示例 channel擅长解决什么样的并发问题,Mutex擅长解决什么样的并发问题 一个并发问题该怎么入手解解决 一个重要的plus思维 前戏 前面很多篇的文章都在围绕channel介绍,而只有前一篇sync的文章介绍到了Mutex,不是我偏心,而是channel在Golang是first class级别的,设计在语言特性中的,

Java Consumer and Producer demo

import java.util.Random; import java.util.concurrent.LinkedBlockingQueue; class producer {     Random rdm = new Random();     void produce( LinkedBlockingQueue<Integer> productlist)     {          while(true)          {              if(productlist.s

golang 如何查看channel通道中未读数据的长度

可以通过内建函数len查看channel中元素的个数. 内建函数len的定义如下: func len(v Type) int The len built-in function returns the length of v, according to its type: Array: the number of elements in v.数组中元素的个数 Pointer to array: the number of elements in *v (even if v is nil).数组中

golang goroutine、channel和select

goroutine package main import "fmt" import "time" func printn(id int){ for i := 0;i<10;i++ { fmt.Println(id,":",i) } } func main(){ for i :=0;i<5;i++ { go printn(i) } fmt.Println("waiting...") time.Sleep(time.

Golang中的channel代码示例----无缓冲、有缓冲、range、close

// code_043_channel_unbuffered project main.go package main import ( "fmt" "time" ) func main() { c := make(chan int, 0) //无缓冲的通道 //内置函数 len 返回未被读取的缓冲元素数量, cap 返回缓冲区大小 fmt.Printf("len(c)=%d, cap(c)=%d\n", len(c), cap(c)) go f

golang 初体验 - channel

channel 分为两种: 1. 无缓冲 channel 2. 缓冲 channel 无缓冲 channel 的使用必须遵循一个原则:推送和读取必须同时存在,否则就发生死锁 先上代码: 这里定义了一个 int 型的信道 c1,然后通过辅助协程并行给 c1 推送 v(就是 i)然后又在主协程读取. 输出: 有缓冲 channel 必须遵循一个原则:要确保 channel 缓冲的个数与推送.读取成比例 输出: 这里定义了一个缓冲区长度为3的 channel,然后推送3条消息,接着循环读取这个 cha

golang 简单的 channel

package main import(         "fmt"         "os"         "bufio"         ) func main(){ in :=make(chan string) out :=make(chan string) reader := bufio.NewReader(os.Stdin)         go func(){                 for {               

Kafka 学习笔记之 Producer/Consumer (Scala)

既然Kafka使用Scala写的,最近也在慢慢学习Scala的语法,虽然还比较生疏,但是还是想尝试下用Scala实现Producer和Consumer,并且用HashPartitioner实现消息根据key路由到指定的partition. Producer: import java.util.Properties import kafka.producer.ProducerConfig import kafka.producer.Producer import kafka.producer.Ke