前言

①系统开启一个全新线程所耗费的成本是相对较高的, 其原因在于这关联到与操作系统的交互。处于这种状况下, 运用线程池能够很好地提高性能, 特别是当程序里需要构建大量生存期颇为短暂的线程时, 更应当思索运用线程池。

②系统启动之时, 线程池便会创建出大量处于空闲状态的线程, 而程序一旦把一个函数提交给线程池, 线程池就会启动一个空闲线程去执行此函数, 当这个函数执行完毕之后, 该线程不会死亡, 而是再次返回至线程池中, 转变为空闲状态, 等着去执行下一个函数。

使用线程池能够有效地对系统里并发线程的数量进行控制。倘若系统当中包含着数量众多的并发线程时候, 系统性能就会急剧下降, 甚至会造成解释器崩溃【正在以并发方式执行的程序将会大量耗费内存以及cpu】, 然而线程池的最大线程数这一参数能够把系统里并发线程的数量控制在不超过这个数字的范围之内。

线程池的使用

①线程池的基类是, . 模块里的那个类;, 提供了两个子类, 也就是那个类和别的类;其中, 这个类用于创建线程池;而, 另一个类用于创建进程池。

②要是运用线程池或者进程池实现并发编程的管理, 只要把对应的task函数提交给线程池或是进程池, 其余的事务就会由线程池或者进程池来处理妥当。【线程池会发动一个处于空闲状态的线程去执行task函数】。

③  类提供了如下常用方法:

Python线程池_python ThreadPoolExecutor使用_python线程池原理

线程池接收程序提交的task函数后,会返回一个对象, 该对象所属类用于获取线程任务函数的返回值线程任务在新线程中异步执行, 线程执行函数类似“将来完成”任务, 用其代表。

⑤  提供了如下方法:

⑥在使用完一个线程池时, 应当调用此线程池的 () 方法, 这么做会启动线程池的关闭序列。调用 () 方法之后的线程池变得不再接纳全新任务【不再接受程序所分配的函数】, 不过会把以往全部已提交的任务执行到头【已位于线程池里的线程任务】。当线程池里的全部任务都被执行完毕后, 该线程池里的所有线程都会走向死亡。

⑦使用线程池来执行线程任务的步骤如下:

通过调用类的构造器去创建一个线程池, 定义一个作为线程任务的普通函数,调用对象的()方法来提交该线程任务, 把函数任务提交到线程池中线程池会为其分配空闲线程, 在不想提交任何任务时调用对象的() 方法来关闭线程池。

参考博客:线程池及其原理和使用(超级详细)

参考博客: 多线程和线程池

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐