当前位置:网站首页>5.5线程池
5.5线程池
2022-07-30 05:39:00 【l_ethan】
线程池是由服务器预先创建的一组子线程,线程池中的线程数量应该和 CPU 数量差不多。线程池中的所 有子线程都运行着相同的代码。当有新的任务到来时,主线程将通过某种方式选择线程池中的某一个子 线程来为之服务。相比与动态的创建子线程,选择一个已经存在的子线程的代价显然要小得多。至于主 线程选择哪个子线程来为新任务服务,则有多种方式:
主线程使用某种算法来主动选择子线程。最简单、最常用的算法是随机算法和 Round Robin(轮流 选取)算法,但更优秀、更智能的算法将使任务在各个工作线程中更均匀地分配,从而减轻服务器 的整体压力。
主线程和所有子线程通过一个共享的工作队列来同步,子线程都睡眠在该工作队列上。当有新的任 务到来时,主线程将任务添加到工作队列中。这将唤醒正在等待任务的子线程,不过只有一个子线 程将获得新任务的”接管权“,它可以从工作队列中取出任务并执行之,而其他子线程将继续睡眠在 工作队列上。
线程池的一般模型为:
线程池中的线程数量最直接的限制因素是中央处理器(CPU)的处理器(processors/cores)的数量 N :如果你的CPU是4-cores的,对于CPU密集型的任务(如视频剪辑等消耗CPU计算资源的任务)来 说,那线程池中的线程数量最好也设置为4(或者+1防止其他因素造成的线程阻塞);对于IO密集 型的任务,一般要多于CPU的核数,因为线程间竞争的不是CPU的计算资源而是IO,IO的处理一 般较慢,多于cores数的线程将为CPU争取更多的任务,不至在线程处理IO的过程造成CPU空闲导 致资源浪费。
空间换时间,浪费服务器的硬件资源,换取运行效率。
池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化,这称为静态资源。 当服务器进入正式运行阶段,开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中 获取,无需动态分配。
当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。
边栏推荐
- ClickHouse data insert, update and delete operations SQL
- 2022 SQL big factory high-frequency practical interview questions (detailed analysis)
- 131.分割回文串
- Frobenius norm(Frobenius 范数)
- torch.load()
- [GLib] What is GType
- The difference between asyncawait and promise
- [Other] DS5
- MySQL的存储过程
- 解决没有配置本地nacos但是一直发生localhost8848连接异常的问题
猜你喜欢
[Mysql] DATEDIFF函数
解决phpstudy无法启动MySQL服务
[详解C语言]一文带你玩转数组
This dependency was not found:
[Image processing] Image skeleton extraction based on central axis transformation with matlab code
It is enough for MySQL to have this article (37k words, just like Bojun!!!)
cnpm安装步骤
MySQL-Explain详解
安装pytorch
524.通过删除字母匹配到字典里最长单词
随机推荐
质数(清华大学机试题)(DAY 86)
ClickHouse 数据插入、更新与删除操作 SQL
应用实践 | Apache Doris 在百度智能云计费账单系统的应用实践
np.where()用法
MySQL笔记(pymysql)
flask-socketio实现的网页聊天室(一)
海量号码需要保存,如何才能尽可能少地占用内存?
MySQL 数据库基础知识(系统化一篇入门)
成绩排序(华中科技大学考研机试题)(DAY 87)
384.打乱数组
G巴士计数(Google Kickstart2014 Round D Problem B)(DAY 89)
It is enough for MySQL to have this article (37k words, just like Bojun!!!)
手把手教你彻底卸载MySQL
PyCharm使用教程(较详细,图+文)
[GO Language Basics] 1. Why do I want to learn Golang and the popularization of GO language entry
839. Simulated heap
“tensorflow.keras.preprocessing“ has no attribute “image_dataset_from_directory“
create-nuxt-app创建出来的项目没有server
665.非递减数列
Machine Learning - Gradient Descent Optimization - C language implementation