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简化了我们写并行代码的过程,但实际上整体运行效率并不真正高于单线程程序。
网友评论