Golang的并发编程

查灵 · · 532 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang是为并发而生的语言。优雅的并发编程范式,完善的并发支持,出色的并发性能是golang区别于其他语言的一大特色。

并发的优势:

1、并发能更客观地表现问题模型

2、并发可以充分利用cpu核心的优势,提高程序的执行效率

3、并发能充分利用cpu与其他硬件设备固有的异步性

golang并发采用的协程,也是轻量级别线程,goroutine。而goroutine间通信方式是channel,我们可以使用channel在两个或者多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。这跟面向过程c语言处理多线程采用互斥锁写法不太一样的方式,更直接了当采用并发模式编程。

select用来监控一系列的文件句柄,一旦其中一个文件句柄发生了IO动作,该select()调用就会被返回。该机制也用于实现高并发的socket服务器程序,也可以用来处理异步IO问题。结合channel的缓冲机制。所以在golang并发编程中,需要十分小心处理死锁的问题。通道需要保证有流入也有流出,如果造成只入不出或者流入速度大于流出的速度,都会对程序造成死锁或者堵住。

多核并行化,golang编译器还不能很智能地发现和利用多核的优势。虽然goroutine简化了我们写并行代码的过程,但实际上整体运行效率并不真正高于单线程程序。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:查灵

查看原文:Golang的并发编程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

532 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传