muduo中的Buffer和线程池设计

这篇博客探讨了muduo库中的Buffer类,它是一个基于vector的网络缓冲区,但讨论指出在高并发场景下,deque可能会提供更好的性能。此外,文章介绍了线程池的概念,解释了其通过预先创建线程以减少频繁创建和销毁的开销,并详细描述了线程池处理任务的过程,包括任务队列和线程同步。线程池中的线程从队列中取出任务时需要加锁,以避免竞争条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Buffer

muduo中的buffer指的是一般的应用层缓冲区,Buffer特指muduo::net::Buffer class

 

muduo的底层缓冲区使用的容器是vector,这里和实验室小伙伴讨论使用vector作为底层容器,开销会比较大,因为当容量不足时,会有大量拷贝开销。使用deque效率可能更高。

 

 

 

 

Thread Pool

 

 

 

 

 

 

 

总结:为了减少频繁的创建和销毁线程所带来的开销,先将线程创建好,不销毁,当有任务来了的时候,从线程池中选择一个线程去处理这个任务,就可以减少开销。

首先根据需要创建的线程数,创建这么多的线程,再创建一个任务队列。这些创建好的线程阻塞在任务队列上,当主线程收到某个任务后,就将该任务放到任务队列中,线程池中的线程从任务队列中取一个任务执行。

另外:当线程从队列取任务的时候,需要加锁,防止多个线程同时竞争同一个任务。

问题:

1、所谓的在任务队列中的task到底是什么?

2、从I/O事件来的时候,到最后处理该I/O事件,整个流程的具体过程

3、线程池中多个线程同时watch一个队列,性能是不是可以提升?如何提升呢?线程间使用互斥锁访问队列吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值