前言
该博文只是一个技术分享文章。切勿当称解决问题的绝对正确且唯一的答案。
讨论的问题主要是
“关于HTTP请求的"单线程转化为多线程"以及“多线程转化为单线程”之中利用线程组方式解决问题的思维思考”
在Http之中的多线程与单线程
我们在遇见HTTP接口线程问题的时候,主要的问题类型分为两种 “单线程转化为多线程”以及“多线程转化为单线程”
首先我们要思考一个问题 。对于Http请求来说,他是多线程还是单线程呢?说句很扯的话 ,我们需要观察者的角度去思考问题。
对于整个后台程序来看问题,他们是多线程问题
对于单个HTTP请求来看问题,他们是单线程问题
我认为解决问题的方式,以及方法可能会有很多。
目前由于博主的技术有限,博主也暂时只能想到“使用线程组”的方式解决问题。
因此下文我们就思考在使用线程组的时候。是如何看待下列的问题的
但是,我们可以根据我们的业务需求来思考问题。要讨论多线程转多线程,就必须先讨论多线程转多线程
单线程转化多线程:
为什么我们需要在HTTP之中用到多线程,因为在HTTP请求之中,一部分的请求由于各式各样的原因不需要或者说不能放入HTTP线程进行操作。
但是由于线程是珍贵的资源,并且也希望对线程的状态进行同意操作以及监控。 因此在这时候,线程池就应运而生。
这便是我们经常遇见的单线程转化为多线程问题 ,
之所以我们会如此称呼他,主要的原因便是我们在遇见这类的问题的似乎,我们的注意点主要在于HTTP请求过程的本身。这时候我们就自然而然的得出一个结论“单线程转化为多线程”。
但是如果放在整个后台服务器布局上来说呢?
其实应该是多线程问题转化在另一个多线程之上
多线程转化为单线程
拿在什么情况下,我们需要进行多线程转化为单线程操作呢?
主要是因为我们需要对HTTP请求进行一定的控制。就比如我们不希望一个HTTP请求在同一时间处理的请求超过n个。这乍一听很想限流操作,但是我们却希望的做到的是超过这个数量n的HTTP请求并不会直接退出操作,而是慢慢的等待队列内是否有任务结束之后在进行排队执行。
我们如何进行操作呢?当然解决问题的方案有很多,但是我们也可以用多线程方式解决。
我们可以如同上文那样设立线程组,设立N个线程,每个HTTP请求进来的时候便会将自己的业务逻辑交由线程处理,原HTTP线程阻塞。等待线程返回值之后,继续运行。
我们不难看出,这其实也只是一个“多线程转多线程”的业务逻辑。
但是这时候,我们处理问题,往往我们的思维方式确认为HTTP是个多线程问题。
那么什么时候会将这个多线程转化为单线程呢?
那么我们就将N=1 , 这时候多线程转多线程问题,就变成了多线程转单线程问题。
总结
根据我们上文所说的问题,我们不难得出一个结论。
“单线程转化为多线程问题”以及“多线程转化为单线程”对于线程组来说,本质是一样的,都是多线程转化为为多线程。
只是根据业务需求的不同,根据我们便设计工作线程的数量不同,来解决对应的问题