文档章节

Go 语言初级教程之八[并发]

刘赤龙
 刘赤龙
发布于 2010/06/08 16:01
字数 382
阅读 328
收藏 1

并发
Go的作者选择了消息传递模型来作为推荐的并发编程方法。该语言同样支持共享内存,然后作者自有道理:
 

  1. 不要通过共享内存来通信,相反,通过通信来共享内存。


该语言提供了两个基本的构件来支持这一范型:goroutines和channels。

Go例程
Goroutine是轻量级的并行程序执行路径,与线程,coroutine或者进程类似。然而,它们彼此相当不同,因此Go作者决定给它一个新的名字并 放弃其它术语可能隐含的意义。
创建一个goroutine来运行名为DoThis的函数十分简单:
 

  1. go DoThis() // but do not wait for it to complete


匿名的函数可以这样使用:
 

  1. go func() {
     
  2.   for { /* do something forever */ }
     
  3. }() // Note that the function must be invoked


这些goroutine将会通过Go运行时而映射到适当的操作系统原语(比如,POSIX线程)。

通道类型
有了goroutine,代码的并行执行就容易了。然而,它们之间仍然需要通讯机制。Channel提供一个FIFO通信队列刚好能达到这一目的。
以下是使用channel的语法:
 

  1. /* Creating a channel uses make(), not new - it was also used for map creation */
     
  2. ch := make(chan int)
     
  3. /* Sending a value blocks until the value is read */
     
  4. ch <- 4
     
  5. /* Reading a value blocks until a value is available */
     
  6. i := <-ch


举例来说,如果我们想要进行长时间运行的数值计算,我们可以这样做:
 

阅读全文>>

本文转载自:http://www.mylogged.com/?post=72

刘赤龙
粉丝 14
博文 142
码字总数 0
作品 0
昌平
架构师
私信 提问
程序猿之间的各种鄙视链,你是否也曾经被屌?

程序员——是一个集思维、情商、行为都异于其他传统岗位的群体。清高自傲、闷骚、会修电脑、宅、不善交际、几百年不洗的衬衫牛仔双肩包…,代表着程序员这个群体的鲜明标签。 在目前互联网发...

架构之路
2018/01/07
0
0
高性能 NoSQL 多模型数据库 - ArangoDB

ArangoDB 是一个开源的分布式原生多模型数据库 (Apache 2 license)。 理念 利用一个引擎,一个 query 语法,一项数据库技术,以及多个数据模型,来最大力度满足项目的灵活性,简化技术堆栈,...

匿名
2013/02/06
17.5K
10
开发四年只会写业务代码,分布式高并发都不会还想做架构师?

我朋友也是个写代码的程序员,跟女友已经恋爱多年,最近突然结婚了。 他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。 我聊天时打趣他...

宋庆离
03/26
88.3K
0
开发四年只会写业务代码,分布式高并发都不会还做程序员?

我朋友也是个写代码的程序员,跟女友已经恋爱多年,最近突然结婚了。 他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。 我聊天时打趣他...

宋庆离
03/18
7.5K
0
开发四年只会写业务代码,分布式高并发都不会还做程序员?

我朋友也是个写代码的程序员,跟女友已经恋爱多年,最近突然结婚了。 他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。 我聊天时打趣他...

PHP架构资源分享
03/05
347
0

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
40分钟前
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
43分钟前
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
49分钟前
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
51分钟前
4
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部