内存池线程池应用场景分析

为什么需要内存池?

对于服务器,如果不断有客户端连接,并且客户端不断发送消息,对于每个连接的每个消息,服务器都需要去malloc/free内存。如果服务器需要7*24运行,时间久了,就会产生很多内存碎片,没有整块,最后就有可能malloc比较大的内存的时候失败。最后进程就会coredump。

这种问题,出现了很难解,因为程序要运行很长时间才会出现。解决方案就是使用内存池。

频繁的malloc/free, 会造成哪些问题?

1.不利于内存管理

2.内存碎片

3.出现内存泄漏,不容易查出具体位置。
典型的场景,服务器处理网络io。message较大的时候,recv、parse后,需要push到另一个thread进行处理。使用栈内存不合适,需要申请堆内存。recv的时候申请buffer,send后,释放buffer。每来一个消息,都需要申请、释放内存。操作系统在进行malloc内存的时候之后找一块符合要求的内存给你,并不会考虑到内存碎片这些问题,所以如果反复多次进行malloc的动作难免产生内存碎片,所以有了内存池。内存池可以看作是一个避免内存碎片的方法,人们为了避免内存碎片而想出来的一种办法。

为什么需要线程池?
线程池主要解决两个问题:线程创建与销毁的开销以及线程竞争造成的性能瓶颈。通过预先创建一组线程并复用它们,线程池有效地降低了线程创建和销毁的时间和资源消耗。同时,通过管理线程并发数量,线程池有助于减少线程之间的竞争,增加资源利用率,并提高程序运行的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值