zoukankan      html  css  js  c++  java
  • golang初识2

    Go的CSP并发模型实现:M, P, G

    Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是Go语言特有的,
    也是Go语言推荐的:CSP(communicating sequential processes)并发模型。 CSP并发模型是在1970年左右提出的概念,属于比较新的概念,不同于传统的多线程通过共享内存来通信,CSP讲究的是“以通信的方式来共享内存”。 请记住下面这句话: Do not communicate by sharing memory; instead, share memory by communicating. “不要以共享内存的方式来通信,相反,要通过通信来共享内存。” 普通的线程并发模型,就是像Java、C
    ++、或者Python,他们线程间通信都是通过共享内存的方式来进行的。非常典型的方式就是,
    在访问共享数据(例如数组、Map、或者某个结构体或对象)的时候,通过锁来访问,因此,在很多时候,衍生出一种方便操作的数据结构,叫做“线程安全的数据结构”。
    例如Java提供的包”java.util.concurrent”中的数据结构。

    1. goroutine-channel

    (1) go

       go function_name...

    (2) chan

        varName chan typeName

    src:termial_factorial_chan.go

    package main
    
    import (
        "fmt"
        "os"
        "strconv"
    )
    
    func main() {
        var val, x, y = 0, 0, 0
        input, err := strconv.Atoi(os.Args[1])
        if err != nil {
            fmt.Println(err)
        }
        
        ch := make(chan int)
        
        val = input
    
        for val > 0 {
            go factorial(val, ch)
            val--
        }
        
        for j := 0; j < input; j++ {
            x = <-ch
            y = y + x
        }
        
        fmt.Println("阶乘,累加", input, "=", y)
    }
    
    func factorial(num int, ch chan int){
        ret2 := 1
        for num > 1 {
            ret2 = ret2 * num
            num--
        }
        ch <- ret2
    }

    exec:

    go run termial_factorial_chan.go 18
  • 相关阅读:
    单选、复选框控制表格行高亮 JQuery
    java内存泄露处理的方法
    spring几种Dao支持配置
    遇见你,是我最美丽的意外
    JavaClassLoader的一些热运用
    CSS Sprites 图片整合技术
    关于前端工程师与其他岗位协作的想法
    JAVA断言使用
    dreamover 模板
    javascriptdom学习笔记
  • 原文地址:https://www.cnblogs.com/xiaobin-hlj80/p/10672813.html
Copyright © 2011-2022 走看看