聊聊并发,进程通信方式,go 协程简单应用场景
开篇提问
知道并发,并行,线程,协程概念吗?或者知道大概含义吗?
有线程为什么还要有协程?区别是什么?
『进程』通信方式知道几种?有没有超过 3 种?
golang『协程』通信方式推荐?
使用并发的目的是为什么?是能帮我们解决什么问题吗?
概念
并发,线程,协程:概念是不可能概念的,google 去吧。
并行:一般是指多个 CPU 实例或者多台机器在『同一时刻』同时执行某个逻辑(方法)
『进程』通信方式
信号量与互斥量之间的区别:
(1)互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
(2)互斥量值只能为 0/1,信号量值可以为非负整数。
也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。
(3)互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。
go 协程通讯使用
基本上就是推荐使用 channel,这个是最推荐的使用形式;
还有就是使用 sync.Mutex
互斥锁进行加锁通讯;
更详细的介绍以后写;
go 使用协程一些应用场景,简单举例
进行互不相干的『循环』,需要等待结果计算
这种情况下,一般是不同『数据集合』需要进行『处理』,在处理的过程中两个数据集合对『结果』造成的影响 没有时序行 ;
这种情况下,完全可以采用两个数据单独进行协程处理然后再进行后续运算;
需要额外进其他不相干的业务,不耽误『主协程』的返回值,不等待
一般有些业务处理以后,有些『额外工作』需要处理但是不耽误主协程返回数据,这个时候就可以开个协程去做,不用等待
对某些任务进行时间限制,『超时关闭』当前操作
例如,通过管道 channel 发送某些数据,若超时则自动放弃本次发送,关闭通道。
篇末提问
使用过协程吗?知道协程与线程的区别吗?
如果是单核 CPU,开协程会有用吗?
本文由于没有帮助你提升 code 能力?
进程通讯方式有没有一点点了解?
你会使用本文的协程案例提升运行速度吗?
看完三件事❤️
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 java 烂猪皮 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀
.关注后回复【666】扫码即可获取学习资料包
作者:赤一
评论