• Linux编程之线程池的设计与实现


    Linux编程之线程池的设计与实现(C++98)

    代码

    假设服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是空间换时间,
    即“浪费”服务器的硬件资源,以换取其运行效率。
    提升服务器性能的一个重要方法就是采用“池”的思路,
    即对一组资源在服务器启动之初就被完全创建好并初始化,这称为静态资源分配。
    当服务器进入正式运行阶段,即开始处理客户端请求时,如果它需要相关资源就可以直接从池中获取,
    无需动态分配。很显然,直接从池中取得所需要资源比动态分配资源的速度快得多,
    因为分配系统资源的系统调用都是很耗时的。当服务器处理完一个客户端连接后,
    可以把相关资源放回池中,无须执行系统调用释放资源。从最终效果来看,
    资源分配和回收的系统调用只发生在服务器的启动和结束,
    这种“池”的方式避免了中间的任务处理过程对内核的频繁访问,提高了服务器的性能。
    我们常用的线程池和内存池都是基于以上“池”的优势所设计出来的提升服务器性能的方法,
    今天打算以C++98设计一个基于Linux系统的简单线程池。

    为什么要采用线程池?

    首先想一想,我们一般的服务器都是动态创建子线程来实现并发服务器的,比如每当有一个客户端请求建立连接时我们就动态调用pthread_create去创建线程去处理该连接请求。这种模式有什么缺点呢?

    动态创建线程是比较费时的,这将到导致较慢的客户响应。
    动态创建的子线程通常只用来为一个客户服务,这将导致系统上产生大量的细微线程,线程切换也会耗费CPU时间。
    所以我们为了进一步提升服务器性能,可以采取“池”的思路,把线程的创建放在程序的初始化阶段一次完成,这就避免了动态创建线程导致服务器响应请求的性能下降。

    线程池的设计思路

    以单例模式设计线程池,保证线程池全剧唯一;
    在获取线程池实例进行线程池初始化:线程预先创建+任务队列创建;
    创建一个任务类,我们真实的任务会继承该类,完成任务执行。

  • 相关阅读:
    贪心之跳跃
    Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞
    Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究
    d为何用nan作为浮点默认
    【Python画蜘蛛侠】你的DNA动了吗?
    Java基础:代理
    PyTorch笔记 - Attention Is All You Need (2)
    探索Java世界中的七大排序算法(上)
    java计算机毕业设计ssm驾校预约考试管理系统a3cf7(附源码、数据库)
    如何解决openal32.dll丢失,有什么办法解决
  • 原文地址:https://blog.csdn.net/RuanJian_GC/article/details/132866951