美文网首页
第14章 并发、并行、协程

第14章 并发、并行、协程

作者: yezide | 来源:发表于2020-01-25 13:50 被阅读0次

1、协程

package main

import (
    "fmt"   
    "time"
)

func main() {
    fmt.Println("主函数开始")
    go longWait()
    go shortWait()
    time.Sleep(4 * 1e9)
    fmt.Println("主函数结束")
}

func longWait() {
    fmt.Println("开始longWait.")
    time.Sleep(5 * 1e9)
    // 以下代码不会被执行,原因是主函数只等了4s,main退出后协程被销毁
    fmt.Println("结束longWait.")
}

func shortWait() {
    fmt.Println("开始shortWait.")
    time.Sleep(2 * 1e9)
    fmt.Println("结束shortWait.")
}

2、 信道

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan string)
    go sendData(ch)
    go getData(ch)
    time.Sleep(10 * 1e9)
}

func sendData(ch chan string) {
    ch <- "welcome "
    ch <- "to "
    ch <- "the "
    ch <- "junnel"
}

func getData(ch chan string) {
    for {
        input := <- ch
        fmt.Printf("%s ", input)
    }
}

3、 一个好玩的计算素数的例子

package main

import "fmt"

// 构建队列,放入2-100的整数
func genData(ch chan int) {
    for i :=2; i <= 100; i++ {
        ch <- i
    }
    defer close(ch)
}

// 素数计算过程. 思路是原始数据 % 第1个,如果不符合去掉
// 主要靠主函数那里
func filterData(originCh chan int, newCh chan int, firstNum int) {
    for {
        num := <- originCh
        if num % firstNum != 0 {
            newCh <- num
        }
    }
}

func main() {
    // 初始化数据
    originCh := make(chan int)
    go genData(originCh)

    for {
        firstNum := <- originCh
        fmt.Print(firstNum, " ")
        newCh := make(chan int)
        go filterData(originCh, newCh, firstNum)
        originCh = newCh
    }
}

相关文章

  • 第六天

    一、并发编程 并发与并行(并发时间片轮询)资源竞争 1、goruntine协程 主协程退出了其他协程也跟着退出 主...

  • Go协程、并发、信道

    Go 通过协程实现并发,协程之间靠信道通信 1.1 并发、并行是什么? 并行其实很好理解,就是同时执行的意思,在某...

  • 【python】协程之asyncio:实现并发、asyncio实

    asyncio协程如何实现并发 1、先介绍一下 并发和并行以及高并发 【并发】(Concurrent):同时拥有两...

  • Golang学习笔记--协程和通道随笔

    并发:逻辑上具备同时处理多个任务的能力 并行:物理上在同一时刻执行多个并发任务 单线程的用协程做并发:协程在单个线...

  • 第14章 并发、并行、协程

    1、协程 2、 信道 3、 一个好玩的计算素数的例子

  • python网络爬虫:多任务-进程、线程

    一 、实现多任务的方式 多线程多进程协程多线程+多进程 并行,并发 并行:同时发起同时执行,(4核,4个任务)并发...

  • Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在python...

  • 聊聊并发,进程通信方式,go协程简单应用场景

    开篇提问 知道并发,并行,线程,协程概念吗?或者知道大概含义吗? 有线程为什么还要有协程?区别是什么? 『进程』通...

  • Go语言并发

    Go语言并发 Go语言级别支持协程,叫做goroutine Go 语言从语言层面支持并发和并行的开发操作 Go并发...

  • Gevent

    前述 进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在pyt...

网友评论

      本文标题:第14章 并发、并行、协程

      本文链接:https://www.haomeiwen.com/subject/ymyuzctx.html