HTTP高并发服务器面经总结

池化技术:指提前准备一些资源,在需要时可以重复使用这些预先准备的资源。有两个特点:提前创建和重复利用。(如线程池、连接池、内存池)

线程池:类似于操作系统中的缓冲区的概念,流程:先启动若干数量的线程,并让这些线程处于睡眠状态,

2、detach和join有什么区别

(1)当调用join(),主线程等待子线程执行完之后,主线程才可以继续执行,此时主线程会释放掉执行完后的子线程资源。主线程等待子线程执行完,可能会造成性能损失。

(2)当调用detach(),主线程与子线程分离,他们成为了两个 独立的线程 遵循cpu的时间片调度分配策略。子线程执行完成后会自己释放掉资源。分离后的线程,主线程将对它没有控制权。

3、线程池中有多少个线程,线程池数量如何设定

默认8

调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。

Ncpu 表示 CPU的数量。

如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 Ncpu+1

如果是IO密集型任务,参考值可以设置为 2 *Ncpu。因为线程间竞争的不是CPU的计算资源而是IO,IO的处理一般较慢,多于cores数的线程将为CPU争取更多的任务,不至在线程处理IO的过程造成CPU空闲导致资源浪费

最佳线程数量 = ((线程等待时间+线程CPU时间)/ 线程CPU时间)* CPU个数。

由公式可得,线程等待时间所占比例越高,需要越多的线程,线程CPU时间所占比例越高,所需的线程数越少。

4、listen 函数第二个参数 backlog 参数作用

int listen(int sockfd, int backlog);

backlog是accept阻塞队列的长度,即等待 accept的socket的最大数量

5、listen底层用的是什么队列

a.半连接队列(Incomplete connection queue),又称 SYN 队列。……

b.全连接队列(Completed connection queue),又称 Accept 队列。……

6.服务器基本框架

此项目是基于Linux的轻量级多线程Web服务器,应用层实现了一个简单的HTTP服务器,利用多路IO复用,可以同时监听多个请求,使用线程池处理请求,使用模拟proactor模式,主线程负责监听,监听有事件之后,从socket中循环读取数据,然后将读取到的数据封装成一个请求对象放入队列。睡眠在请求队列上的工作线程被唤醒进行处理,使用状态机解析HTTP请求报文,实现同步/异步日志系统,记录服务器运行状态,并对系统进行了压力测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值