当前位置: 首页 > article >正文

Webserver回顾

线程池如何工作?

从请求队列中取出request请求,然后process处理
在这里插入图片描述
process是处理业务代码,用于解析http请求的

如何为线程上锁

由于线程共享同一块资源,为了避免线程重复读写资源的数据安全问题
在这里插入图片描述

发什么信号

定义信号

在这里插入图片描述

信号量如何工作的?

当有一个请求添加到请求队列中时,释放信号,启动工作线程来解析这个请求。这样的话就不会还没有获得请求就启动工作线程。
在这里插入图片描述
run是工作线程,wait的时候阻塞在这,当释放一个信号后,就继续执行。
在这里插入图片描述
这里的wait和post实际上是解耦合之后的。简化了命令
在这里插入图片描述
在线程同步机制类里面,有互斥锁类、条件变量类、信号量类,这些都保证了所有线程能够同步进行,不会有的特别快。有点理解这个线程同步的内涵了

信号捕捉

信号量工作除了wait和post,还有信号捕捉。信号捕捉应该捕捉的就是来自系统的中断啥的
在这里插入图片描述
在这里插入图片描述
handler是一个信号处理函数的指针。
在这里插入图片描述
在这里插入图片描述
为什么一开始要忽略SIGPIPE信号?
在这里插入图片描述

考虑客户端异常断开的情况,那这个时候服务器再往里面写数据那就是直接退出了,在任何时候我们应该保持服务器能够一直开启而不是崩溃退出。忽略了这个情况服务器就不会未写入而崩溃,提升了健壮性。
在这里插入图片描述
发送信号的位置好像并不是说放在线程与线程之间,而是放在业务逻辑之间,即不同的函数当中,比如添加请求的时候,那就会释放信号,说明这个时候有请求了需要你去读了,而在线程工作的时候会等待,等到你有一个请求过来了我再去工作
在这里插入图片描述
所有工作线程刚被创建的时候就是就绪态了,刚被创建的时候就有回调,而run是一个死循环,线程池创建的时候,所有8个子线程就就绪工作了,只不过被wait阻塞了,一旦拿到一个信号立马就会开始工作。调用业务process()处理流程
在这里插入图片描述
在这里插入图片描述
所以说一般在最外面主函数来执行请求的获取,然后是工作线程来对请求解析执行业务逻辑。工作线程和IO线程是如此区分的。

线程池类有哪些函数?

在这里插入图片描述
构造、析构、append、worker、run
回调函数worker要用函数指针,void* worker(void *arg);使用静态函数

append传入了一个T*的request对象
process()是用request对象来调用的,request是线程池类的私有成员,也是
在这里插入图片描述

在这里插入图片描述
也是一个套接字
在这里插入图片描述
处理该传入的套接字

run中如何信号阻塞

m_queuestat是
在这里插入图片描述
线程池类的私有成员
在这里插入图片描述
而这个私有成员是线程同步类里面的信号量类
在这里插入图片描述
设计模式是模板方法
在这里插入图片描述


http://www.kler.cn/a/404611.html

相关文章:

  • 数据结构(顺序栈——c语言实现)
  • 标准驱动开发(Linux2.6(cdev) 的开发)
  • ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
  • Hbuilder X/Uniapp 关于app运行调试及mumu模拟器运行问题
  • C语言菜鸟入门·关键字·void的用法
  • 自然语言处理:第六十三章 阿里Qwen2 2.5系列
  • 【AI知识】两类最主流AI应用(文生图、ChatGPT)中的目标函数
  • React第五节 组件三大属性之 props 用法详解
  • ts: 定义一个对象接收后端返回对象数据,但是报错了有红色的红线为什么
  • 安全测试必学神器 --BurpSuite 安装及使用实操
  • Go 工具链详解(八):go telemetry
  • Wallpaper壁纸制作学习记录05
  • 【JavaSE 网络编程和日期与时间知识总结】
  • Java Web应用中的跨站请求伪造(CSRF)防御策略
  • 关于一次开源java spring快速开发平台项目RuoYi部署的记录
  • hj 212 协议解包php解包,
  • 从0开始的数据结构速过——番外(1)
  • ubuntu20.04如何升级python3.8到python3.10
  • React 组件中 State 的定义、使用及正确更新方式
  • 本地git多用户ssh配置
  • Adobe XD文件处理:即时设计的在线解决方案
  • 腾讯云存储COS上传视频报错
  • vue3+ant design vue带勾选表格的坑,记录一下
  • Android开发实战班 - 第一部分:Android开发基础
  • 李沐学习安装d2l、gpu-pytorch
  • Android Google登录接入