C++实现一个支持高并发的线程池

2023-04-10 23:54:49 2741人已围观 6已点赞 9人已收藏

简介本文向大家介绍一个C++实战项目:C++实现一个支持高并发的线程池。在多线程高并发场景当中,线程池主要解决线程频繁创建销毁时资源浪费问题,该项目具有一定的C++实战价值,感兴趣的朋友可以参考一下。

什么是线程池

线程池就是一种利用少量线程解决大量任务(线程数 < 任务数)的工具。而高级的线程池会从线程的数量,线程的活跃时间,任务的存取策略等角度进行优化,以达到更高效目的。

为什么要使用线程池呢?

简单来说就是线程本身存在开销,我们利用多线程来进行任务处理,单线程也不能滥用,无止禁的开新线程会给系统产生大量消耗,而线程本来就是可重用的资源,不需要每次使用时都进行初始化,因此可以采用有限的线程个数处理无限的任务。

如何实现

我们可以把所有的任务放在一个队列内,并创建一定数量的线程。线程空闲时,可以自动从任务队列中取出任务,任务完成后,又进入空闲,并尝试取出下一个任务。而这,就是最简单的线程池了。

代码示例


#include "Runnable.h"
#include "ThreadPoolExecutor.h"
#include <iostream>

// 任务
class RunnableTest : public Runnable
{
public:
	RunnableTest(int nArg)
	{
		nData = nArg;
	}
	virtual ~RunnableTest()
	{
	}

	void Run()
	{
		std::cout << "Task " << nData << " is finished!\n";
	}
private:
	int nData;
};

int _tmain(int argc, _TCHAR* argv[])
{
	_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

	CThreadPoolExecutor* pExecutor = new CThreadPoolExecutor();
	pExecutor->Init(1, 10, 100);

	RunnableTest* m_pRunArr[100];
	for (int i = 0; i < 100; ++i)
	{
		m_pRunArr[i] = new RunnableTest(i);
		while (!pExecutor->Execute(m_pRunArr[i]))
		{
			//std::cout << "线程 " << i + 1 << "执行失败..." << std::endl;
		}
	}
	pExecutor->Terminate();

	// 释放内存
	delete pExecutor;
	for (int i = 0; i < 100; ++i)
	{
		delete m_pRunArr[i];
	}
	system("pause");
	return 0;
}

结果:

C++线程池,线程相关,C++高并发


源码下载
  • 最近更新:   2022-06-22开发环境:   Visual Studio 2015
  • 源码大小:   19.85KB下载次数:  16 

更多为你推荐