网路服务器——线程池技术

2024-01-28 16:28
文章标签 线程 技术 服务器 网路

本文主要是介绍网路服务器——线程池技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、线程池技术
  • 二、使用原理
  • 三、优点
  • 总结


一、线程池技术

  1. 预创建原则,线程池内部准备线程备用, 不宜过多。
  2. 线程应该重用性,可以一对多处理任务或服务不同的客户端。
  3. 处理单元(线程)数量并不固定,动态扩容与缩减(任务量)。
  4. 设计灵活的任务传递方式与任务接口,线程可以执行不同种类的任务,不能将线程工作固定。

二、使用原理

线程与线程之间有一个任务传递方式:生产者——消费者。
监听线程就是生产者,处理线程就是消费者。通过条件变量+互斥锁实现。
生产者与消费者之间有一个任务队列(怎么实现都可以,我用的是环形队列)。
条件变量需要创建工作条件:生产者把任务放到队列中来,消费者拿走处理。
生产者工作条件:任务队列非满。满则挂起。添加完毕,唤醒消费者。
消费者条件相反:任务队列非空获取任务执行,为空则挂起。执行任务完毕,唤醒生产者继续生产。
任务队列是共享资源,多线程访问需要互斥。(任务队列里是函数指针队列)
线程池技术为多线程技术

主线程(生产者)负责epoll,负责工作:

  1. epoll监听树创建。
  2. 设置第一次监听
  3. 阻塞多轮监听

如何处理协议:通过协议映射表(函数指针列表),通过不同的协议编号,执行不同的函数。
生产者访问树更多是读访问,知道所有文件描述符轮询监听。
消费者也要访问树,要去执行链接,将sock放到树上。链接断开,将sock从树上移除。
还要找个管理者负责扩容和缩减,负责管理消费者。管理线程状态,完成扩容和缩减任务。

三、优点

  1. 提高资源利用率:线程池可以重复利用已经创建了的线程
  2. 提高响应速度:因为当线程池中的线程没有超过线程池的最大上限时,有的线程处于等待分配任务状态,当任务到来时,无需创建线程就能被执行。
  3. 具有可管理性:线程池会根据当前系统特点对池内的线程进行优化处理,减少创建和销毁线程带来的系统开销。

总结

一共仨身份:一个生产者线程、一个管理者和n个消费者线程,有一个监听队列,有一个监听树。要做一个线程的消息映射表,不同sock就绪,执行不同的任务。读取不同客户端请求还要对协议进行再一次解析。

这篇关于网路服务器——线程池技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654159

相关文章

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.