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


一、线程池技术

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

二、使用原理

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

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

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

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

三、优点

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

总结

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

相关推荐

  1. 网路服务器——线技术

    2024-01-29 09:00:03       32 阅读
  2. C-线

    2024-01-29 09:00:03       21 阅读
  3. 线

    2024-01-29 09:00:03       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 09:00:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 09:00:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 09:00:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 09:00:03       20 阅读

热门阅读

  1. 小世界网络 | 小世界网络(Python)

    2024-01-29 09:00:03       37 阅读
  2. myql入门

    2024-01-29 09:00:03       32 阅读
  3. Redis面试题35

    2024-01-29 09:00:03       33 阅读
  4. Vue路由

    2024-01-29 09:00:03       34 阅读
  5. 【洛谷题解】P1706 全排列问题

    2024-01-29 09:00:03       38 阅读
  6. Redis 事务

    2024-01-29 09:00:03       34 阅读
  7. MyBatis框架-XML映射器

    2024-01-29 09:00:03       24 阅读
  8. 关键点标注工具

    2024-01-29 09:00:03       28 阅读