微服务小知识:线程池隔离

上周 你说的这个串池绝缘 相当有趣
主要概念是隔离 防止某个服务导致整个系统崩溃
例如2 02 3 年3 月的案例 接口A请求可达1 0万次 接口B有1 0个请求 如果线程池是共享的 满了吗? B跑不动了
优点真的很多 服务隔离性很强 有一个服务宕机了 其他服务可能还可以
快速恢复能力也不错 例如,服务A突然变得更好 直接重启线程池就可以了。
无需等待其他服务
但也有缺点 例如CPU开销会增加 您设置了1 0个线程池 CPU可能会增加,配置复杂度也高。
每个线程池参数都要调整 如果调整不好,就会浪费资源
内存占用也会增加。
每个线程占用内存 线程越多,内存就越高。

适用场景非常明确。
高风险服务应隔离 比如支付接口。

不同的服务请求是不同的。
比如实时计算和批处理 绝对入手
微服务架构也适合 微服务的线程池 它们不会互相影响
不确定这部分 具体如何选择线程组的数量呢? 可能要看实际业务情况
算了 这取决于你

常见的池化技术应用类型都有哪些

抱歉,说起这个组装技术,我之前在项目中其实也遇到过很多风险。
我记得那一年我在一家初创公司做后端开发。
当时,我对线程池还很陌生。
我觉得这个东西可以提高效率,所以我应该好好利用它。

当时,项目的需求突然增加。
我们的服务器经常很忙,响应速度很慢。
我只是想到使用线程池来改进它。
所以,我设置了线程组大小,认为可以分担压力。
结果,你猜怎么着?服务器仍然频繁崩溃,内存泄漏也接二连三地发生。

经过仔细排查,发现是我把线程池设置的太大,导致线程创建和销毁频繁,导致产生大量的内存碎片。
当时确实很困惑,只好重新调整线程池大小,慢慢找出合适的值。

我们来谈谈内存池。
我也陷入了这样的困境。
在项目升级过程中,我优化了内存分配策略,想使用内存池来提高内存使用效率。
结果,您预先分配了过多的内存,导致应用程序在启动时占用大量内存,并且系统响应速度变慢。

当时我真的很后悔,觉得这个记忆收集不好玩,需要根据实际情况进行调整。
后来学习了内存池的原理,意识到预分配的内存要适度,避免浪费。

至于数据库连接池,我从来没有在这件事上冒过什么大的风险。
不过,记得有一次,项目中的数据库连接池没有设置好,导致频繁出现连接泄漏。
当时我使用了数据库连接池监控工具,及时发现并解决了问题。

最后说一下我最熟悉的HttpClient连接池。
过去,在处理HTTP请求时,总是频繁地创建和关闭连接,这给服务器带来了更大的压力。
后来用了HttpClient连接组,立刻就感觉舒服多了。

简而言之,这些集群技术确实可以提高系统性能,但如果使用不当,也可能会导致问题。
应根据实际情况合理确定聚会规模和策略,可以利用集群技术的优势。
哎,这都是血泪史啊!

线程池原理

说起这个线程池,我当时就一头雾水。
就像一个大工厂,有很多工人负责处理各种小任务。
2 02 2 年,我在某城市的一个项目中使用了这个东西。
当时,当我看到任务队列已经满了工作时,我很担心。
但这个线程池并不是随机地找到worker然后塞进去。
它必须是有组织和有纪律的,并且后台线程在默默无闻中工作。

每个线程都有自己的嵌套,栈大小默认,优先级相同。
它们就像一群小机器人,忙于在一个大的多线程单元中工作。
嘿,如果你有太多线程,这将不起作用。
调度费力,缓存利用率不高。
这个线程池就像一个管家,有组织地管理线程,不会重复创建或销毁线程来处理小任务。
这不仅节省了资源,而且保证了核心的充分利用。

我记得我当时设置的线程数是CPU数加2 ,还是比较合适的。
如果太高,线程切换开销会很大;如果太低,则无法处理作业。
使用这个线程池就像一个任务超市。
任务排在队列中,线程就像超市的收银员,一个接一个地处理。

应用范围非常广泛。
对于那些需要处理大量小任务的人,比如2 02 2 对于网页请求中比较流行的网站来说,使用线程池是完美的。
任务虽小,数量却很大。
这个线程池就像一个大而高效的机器,它可以快速处理任务。
再比如,线程池对于性能要求较高的应用程序,或者突然遇到大量请求涌入的应用程序来说非常有用。

但是,这个线程池也有局限性。
对于需要长时间处理的大型任务,例如Telnet连接请求,使用线程池的效果并不明显。
由于Telnet连接耗时较长,而线程创建时间较短,这就如同大象与蚂蚁的赛跑,结果是显而易见的。
说起这个线程池,还是蛮有趣的。