go语言多线程开发 go语言线程池

Go CSP并发模型Gogo语言多线程开发的CSP并发模型
Go实现了两种并发形式 。第一种是大家普遍认知的go语言多线程开发:多线程共享内存 。其实就是Java或者C++等语言中的多线程开发 。另外一种是Go语言特有的go语言多线程开发,也是Go语言推荐的:CSP(communicating sequential processes)并发模型 。
CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,由 Tony Hoare 于 1977 年提出 。简单来说 , CSP 模型由并发执行的实体(线程或者进程)所组成,实体之间通过发送消息进行通信,这里发送消息时使用的就是通道,或者叫 channel 。CSP 模型的关键是关注 channel,而不关注发送消息的实体 。Go 语言实现了 CSP 部分理论。
“不要以共享内存的方式来通信 , 相反 , 要通过通信来共享内存 。”
Go的CSP并发模型 , 是通过goroutine和channel来实现的 。
goroutine 是Go语言中并发的执行单位 。其实就是协程 。
channel是Go语言中各个并发结构体(goroutine)之前的通信机制 。通俗的讲,就是各个goroutine之间通信的”管道“,有点类似于Linux中的管道 。
Channel
Goroutine
golang多线程简单逻辑实现指定个核心最大化使用,比如核心总数减一 。
【go语言多线程开发 go语言线程池】 必要的库 。
要使用的cpu数量 , 建议不全使用 。
建立管道 。
声明使用的cpu数 。
建立互斥关系,本例中主要为了实现所有线程执行完后再执行后续程序 。
创建cpu数减1个线程
后面每个任务结束时要done一个wg , 这里根据具体情况加,是循环就在每个循环里加,保证后面能全部done即可
没有缓冲的、阻塞式的往管道传递字符串 。
Wait是等所有线程都执行完,即增加的数字被全done掉 。
关闭管道 。
假设已有的函数是ReadLogs,在它的基础上加个Wg加函数名的新函数,我觉得这种方式不改变原有的,比较舒服 。
大意是:循环从管道读取字符串,读不到了就跳出循环 。
每个ReadLogs()之后加一个wg.Done(),相当于计数减一 。
ReadLogs()就是要执行的任务,不再解释 。
就是开指定个线程 。
管道阻塞传值 。
wg同步 。
WgReadLogs循环接收 。
每个开发人员都应该知道的16个顶级新计算机编程语言函数式语言
Elixir
Elixir 比 Erlang 更容易编写,具有 Haskell 等语言的函数式编程概念 。Elixir是基于Erlang 虚拟机的,其广为人知的特点是运行低延时、分布式、可容错的系统,并成功用于Web开发与嵌入式软件领域 。
Elm
Elm是一种用于构建 Web 应用程序的函数式语言 。业内一般认为,它适用于创建高可交互应用,例如复杂的用户界面 , 开发人员可以通过 Elm 快速编写富有表现力的系统 。Elm 也以没有运行时异常而闻名 。
PureScript
PureScript是一种可编译为 JavaScript 的纯函数式编程语言 。与 Haskell 最相似的是,PureScript 最适合用于开发 Web 应用程序和服务器端应用程序 。
PureScript 支持类型推断,与其他语言相比,需要明显类型注释要少得多 。
Swift
Swift是一种由苹果公司开发的通用编译编程语言,最早的设想是替代上一代编程语言Objective-C,过程中结合了Objective-C、Rust、Ruby 和 Python等语言的编程思想 。目前Swift用于开发苹果自己的手机、服务器、台式机上的应用软件 。
程序语言
Go
Go语言是由谷歌公司创造的类似C风格的语言 。Go 比 C++ 或 Java 更简洁 , 比 Ruby 或 Python 更安全 。

推荐阅读