前言
该博文只是一个技术分享文章。切勿当称解决问题的绝对正确且唯一的答案。
讨论的问题主要是
单线程操作与多线程操作的区别
问题分析
那我们可以思考一下问题的本质,我们使用线程组解决“单线程转化多线程”问题以及“多线程转化为单线程”的本质解决问题思路是什么呢?
便是我们需要将程序的一部分操作抛出原线程引入到我们设定的线程组操作。
如果我们要对该操作在心中有一个构思图的话应该是什么呢?
可能就有点像生产者消费者那样的一个关系。
多个生产者,多个消费者
但是生产者消费者之中可能有一个或者多个消费队列。
在不同的需求下可能出现不同的问题,不同的问题导致模型进行格式各样的改变。
消费有序性问题
首当其冲的便是消费有序性问题
简单来说便是,设计者希望根据时间的先后顺序来处理对应操作。
那这时候我们如何处理呢?
这时候飘荡在我们脑海里的,往往只有一个名词。MQ,消息队列。使用消息队列来保证操作的有效性。
但是,操作队列的本质,也是件消费队列归一化。简单来说,便是有且仅有一个消费队列。
消费完成有序性问题
后来,我们就有了新的问题,客户希望在前一个消费结束之后才能进行下一个操作。
这时候摆在我们面前的,便是“消费完成有序性问题”
那么这时候我们如何做呢?
我们也只能让消费者的数量变成一,这样才能保持消费完成的顺序性。
思考
我们不难发现,在线程组中。对于这些序列性问题的解决,我们的方案很普遍。便是让这些处理问题的模块操作变为单线程。
单线程操作便于有序性挂上了钩。
就好比那句话,xx只有一次以及无数次。那么对于线程来说,线程处理只有单线程处理以及多线程处理。
在处理的线程数量大于1时,线程的数量决定着工作的效率,但也决定这工作的成本。
当处理的线程唯一的时候,其解决问题的概念就主要为保证工作的顺序性。