golang 并发编程基础
2015-03-02 10:17
260 查看
转载:http://c2pblog.sinaapp.com/archives/450当今硬件发展迅速,CPU早就变成多核心了,如何处理并发编程以适应多核CPU是每一种现代编程语言做重视的点。golang自出生起就宣扬着并发编程,原生的goroutines和channel 很简洁的支持了复杂的并行操作。
http://blog.csdn.net/gdutliuyun827/article/details/25145535
这篇文章细致分析了Go语言的特色,在此对原作者表示感谢。下面边上代码边分析实现过程。
这是一个简单的函数,打印出0到29,为了能够看得比较清楚,我做了相关的延迟处理。如果在主函数中直接去调用这个函数,那么就只能打印一次,这就是非并行化的处理。那么怎么变成并行化呢?很简单,调用的时候在前面加上go就好了。
结果你去运行的时候发现什么东西都跑不出来。不是没有跑出来,太快了,看不到,并且每一次go showNum 的结果都被丢弃了。那么怎么才能看到结果呢?得想一个办法让main停住,那么就写这么一句:
用标准输入给main随便输入一个值。加上这句话以后你去运行就会发现有数字在打印,并且和java 中thread类似,每一次打印都是随机的,无法确定的。这个就是最简单的goroutines了。简单来说,任何一个函数如果要做并行处理,那么就可以再调用这个函数的时候前面加上关键词go 即可。要讲的第二个点就是channel,这个是用来实现goroutine之间通信的,就是说两个goroutine之间交换一些信息<当然主要是相关变量>。定义一个channel的方法是向下面这样:
都是可以的。你要注意的是每一个channel必须有一种类型,并且这个类型是不能随便混合使用的。golang中有用很形象的方式来表示信息的传递:这就是<-这个东西,
一般的chan是可以双向传递的,而你如果定义某一个chan只能单向传递的话,可以写成这样:var c2 = make(chan<-
string)或者var c2 = make(<-chan string)。前一个表示只能传入,后一个表示只能传出。现在我们用一个简单的打印素数的例子,结合goroutine和channel。
这样就是可以了,主函数里面要这样一直读100次
http://blog.csdn.net/gdutliuyun827/article/details/25145535
这篇文章细致分析了Go语言的特色,在此对原作者表示感谢。下面边上代码边分析实现过程。
go showNum()就像这样。既然是并行,我们就同时调用10次这个函数做一个试验
string)或者var c2 = make(<-chan string)。前一个表示只能传入,后一个表示只能传出。现在我们用一个简单的打印素数的例子,结合goroutine和channel。
相关文章推荐
- Java基础24天--03--网络编程(TCP--客户端并发登陆)
- java内存模型(java 并发编程基础)
- 并发编程基础概念(一) IO-同步,异步,阻塞,非阻塞
- moon java 并发的基础知识 以编程思想的第21章为基础
- moon java 并发的基础知识--名词解释部分 以编程思想的第21章为基础
- Java并发编程基础知识片段
- 并发编程之基础(二)
- Go并发编程基础(译)
- 《Java并发编程实践》笔记1——并发编程基础
- C++11 并发编程基础(一):并发、并行与C++多线程
- Java 并发编程基础学习
- Java 并发编程之基础构建模块
- Java基础-网络编程(TCP-客户端并发登录)
- Java基础之Java并发编程:volatile关键字解析
- Golang编程基础- 准备篇
- 《Java Concurrency》读书笔记,Java并发编程实践基础
- 并发编程基础入门需要注意的问题
- [Java 并发] Java并发编程实践 思维导图 - 第五章 基础构建模块
- Java并发编程:并发基础概念
- Go 并发编程基础(一)goroutine,channel