zoukankan      html  css  js  c++  java
  • 线程池的原理及应用

    一:什么是线程池

    线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。

    二:线程池的原理

    线程池创建会设置一个最大容量,就是线程池里面线程的数量,也就是说线程池里面存放固定数量的线程。最优的数量是:2 * cpu的数量个

    三:为什么要使用线程池

    假设有10000台客户端,链接到了服务器,那么服务器如何为这10000个客户端服务呢?

    方式一:为每一个客户端建立一个线程,进行服务,服务结束后,销毁线程。

    结果:十万个线程,会同时去抢夺cpu的使用权,在不同线程之间切换耗费资源(因为cpu要保存线程号,线程运行到哪一个位置,并且还要保存额外的运行状态),而且线程的创建和消耗也非常耗时。而且服务器能够开启的线程数量也不是无限的。

    方式二:创建一个线程池,进行服务。

    优点:因为线程池里面的线程数量是固定的,人为可以控制的,避免了创建于消耗大量线程的时间消耗以及线程切换的资源消耗。能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占系统资源而导致的阻塞现象。

    四:线程池的使用场景

    (一) 需要大量线程来完成任务,且完成任务的时间比较短(保证线程在cpu的使用时间内,完成任务),例如WEB服务器完成网页请求这样的任务,非常适合使用线程池,因为单个任务小,而任务数量巨大。

    (二)对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。

    (三)接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。

    五:python中线程池代码

    # TODO

  • 相关阅读:
    数据库之01-数据库概述
    Bootstrap框架
    jQuery
    补充:html速查表
    BOM,DOM相关案例
    BOM,DOM
    函数,词法分析,内置对象和方法
    前端 之 JaveScript 基础语法: 数据类型; 运算符; 数据转换; 流程控制; 常用内置对象;
    favicon.ioc使用以及注意事项
    redux-undo
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/12113069.html
Copyright © 2011-2022 走看看