连接池实现思路
class ConnectPool
{
public:
ConnectPool(int number)
{
for(int i=0;i<=number;i++)
{
int fd = socket(); // 创建通信的fd
conect(); // 连接服务器
m_list.push(fd);//往容器中存储 链接
}
}
//提取
int getConnect()
{
if(m_list.size()>0)
{
int fd=m_list.head();
m_list.pop();
return fd;
}
return -1;
}
//放回
void putConnect(int fd,bool isvaild)
{
m_list.push(fd);
}
~ConnectPool();
private:
queue<int> m_list;
}
线程池
线程池
优点:
可以回收用完的线程
不需要重复频繁的创建销毁线程
根本:多个线程的一个集合, 可以回收用完的线程
设计思路
管理者->1
工作者->N个
管理者
检测工作线程是否多或少 以及状态
工作者
处理业务逻辑
需要任务队列
存储任务->唤醒阻塞->条件变量
分发任务 没有任务阻塞
线程个数 ->业务逻辑
密集型 需要很多cpu时间 线程个数=当前电脑的核心数
IO操作
线程个数=2倍核心cpu数
代码核心
逻辑图
