
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
并发编程开发是目前大多数软件编程开发程序员都在学习与使用的一种编程开发方式,而本文我们就通过案例分析来简单了解一下,并发编程技术应用与常见问题分析。
1、分布式应用
如果下面解决方法中的概念不是很清楚,可以先看5W,再回来看方法。
使用分布式缓存解决请求去重的问题
先考虑对请求处理的维度。比如静儿举例的场景中,对node节点的watch事件,可以用node作为缓存的key,用node需要处理的关键字段作为value。如果请求中的信息与缓存中的一致,则直接返回不处理。不一致则先更新缓存为新值,再进行处理。
注意,因为保证消息不会被并发处理。刚才的缓存值获取get和重设put操作都是用分布式锁进行了加锁的。
使用有限状态机解决乱序的问题
之所以有「乱序」这个定义,说明系统本身是消息的顺序是有要求的。顺着这个思路来考虑,可以顺理成章的得到解决方案:设定好原本的一个介绍顺序。如果收到事件A则执行事件B。如果收到事件B则执行事件C。如果没收到事件A先收到了事件B,则把MQ消息打回去重发。在打回去的阶段事件A收到处理完了,这时候再收到事件B就可以继续执行了。
刚才说的这种执行顺序的方法就是有限状态机。有限状态机在程序里的实现主要有两种。一种是通过switchcase的方法。就是如果A则B的容易理解的实现。通常被称为“可执行代码”方式。
另外一种方式是:如果每种状态要做的处理比较复杂。用switchcase比较难看。就可以将处理方法抽象成一个类。将这些类的实例放到映射表里。这种实现通常被称为“被动数据”方式。
2、并发编程常见问题
Q:为什么MQ消息不保证有序?
A:因为MQ消息在服务器上是分区存储的,每个分区自己是有序的。分区被接收端消费的时候。一般也是多个接收端一起消费。中间的每个环节都是只能保证局部有序。如果想全局有序。就需要分区只有一个,并且接收端服务器是单点,而且一次只处理一个请求。
Q:MQ的使用上还有什么关键注意点?
A:一般情况下MQ除了不保证消息有序还不保证消息不重复。因为在「网络不可达」的情况下,MQ不能确认消息接收方收到了消息必然会重试。重试除了本文讲的幂等处理外,还可以采用每个消息有的ID+去重表实现。
Q:什么是分布式缓存?
A:分布式缓存有时候也叫「集中式缓存」。是相对于「本地缓存」而言的。因为在目前的多服务器部署(分布式)时代。「本地缓存」这种将信息存储于当前服务器上,其他服务器无法感知。这时候采用一个专门的缓存服务器就可以解决这个问题。这就是分布式缓存了。
Q:什么是有限状态机?
A:有限状态机也称为FSM(FiniteStateMachine),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。FSM可以把模型的多状态、多状态建的转换条件解耦。可以使维护变得容易,代码也更加具有可读性。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。