简介本文向大家介绍一个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++实战项目:基于Duilib的CEF3中C++与JS函数互相调用示例,主要涉及开发技术点为DuiLib界面开发、谷歌浏览器CEF插件开发、C++与JavaScript的相互调用,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
OpenMP是一种用于共享内存并行系统的多线程程序设计方案,本文向大家介绍C++并行计算之OpenMP快速入门,感兴趣的朋友可以参考一下。
本文向大家介绍一个C++实战项目:C++11实现多线程下载操作类,很多时候我们需要同时在网络上下载文件,那么就需要一个类来管理多线程下载,提高下载速度,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
本文向大家介绍一个C++实战项目:C++实现MD5、DES加密,主要涉及MD5加密、DES加解密算法,具有一定的C++实战价值,感兴趣的朋友可以参考一下。
一般好的软件程序是不应该占用太多CPU时间和内存空间的,一般在自己的学习过程中,我们常常忽略这一点,虽然功能实现没有问题,但是程序占用太多CPU时间,这在实际开发中是不允许的,一个好的程序员也应该注意这个问题。本文就CPU使用率问题做一些简单介绍,为开发稳定健壮的程序提供参考。
本文向大家介绍一个C++实战项目:C++制作一个简单的程序依赖DLL打包工具,有时候我们需要对某个程序进行打包,却不知道该程序依赖哪些动态库,这个工具可实现程序的一键打包功能,具有一定的C++实战价值,感兴趣的朋友可以参考一下。