【nginx】1、理论备用知识

O、面试问:什么是进程,什么是线程?

  • 进程是计算机CPU分配资源的最小单位。
  • 举例:

比如你有一个计算机,相当于一个工厂,想要干活,就要建一个厂房,也就是分配一定的空间资源。厂房里有一个或多个工人在工作。这里的工厂就是进程,工人就是线程。一个进程至少有一个线程。

一、同步与异步、阻塞与非阻塞

1. 举例背景

我们去饭店吃饭,有大厅和后厨。

2. 同步与异步
  • 大厅里的我们下单后,如果等待后厨把饭做好端给我们,然后我们在做其他的事情,这是同步。
  • 如果我们下单后,后厨去做饭,我们不等后厨,干别的事情了,那这就是异步。
  • 同步和异步针对的是大厅的我们。
3. 阻塞与非阻塞
  • 大厅的我们下单后,把单子给服务员,服务员把单子给后厨。如果服务员等待后厨做好饭后,再做别的事情,那就是阻塞。
  • 如果服务员把单子给后厨后,去做别的事情了,那就是非阻塞。
  • 阻塞与非阻塞是针对服务员的。
4. 分类
  • 同步阻塞IO
  • 同步非阻塞IO
  • 异步阻塞IO
  • 异步非阻塞IO
5. 事件策略
事件模型描述
select单个进程能打开的最大连接数为1024,因为需要对所有的文件描述符进行线性遍历,所以文件描述符太多会导致性能下降。
poll和select基本一样,因为用链表存储文件描述符,没有最大连接数限制
epollepoll是在每个文件描述符上设置callback来实现,FD就绪后才会调用callback,活跃socket少的话性能高,socket活跃多的话性能低
  • 有三种策略:

    • 策略一:select

      • 当我们下单给服务员后,服务员把单子给厨师。
      • 然后服务员轮询厨师,比如每隔一秒问一次:饭好了没。一旦有一次饭好了,就把饭给我们。
      • 性能不太好
    • 策略二:poll

      • 与select一样,只不过select是数组形式的,有最大限制数,poll是链表形式的,没有最大限制数
      • 性能不太好
    • 策略三:epoll回调

      • 当我们下单给服务员后,服务员把单子给厨师。
      • 然后后厨一旦做好饭了,就告诉服务员,然后服务员就把饭给我们。
  • 【面试】什么时候用select/poll轮询,什么时候用epoll回调?

    • 后端特别快,用select/poll轮询,后端满用epoll回调
4. 谁的性能最低
  • 同步阻塞。之前阿帕奇就是这么干的。

二、进程间切换

当在a进程做a事情,做到一半,去b进程做b事情,b进程又做到一半,去a进程做a事情。这样频繁切换,每次切换的时候,需要保存当前进程的事情,当下一次再次继续做的时候,需要恢复保存的记录,这样保存恢复很消耗性能。

三、文件描述符

  • 文件描述符(File descriptor)是一个用于表述指向文件的引用的抽象画概念
  • 当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符

四、I/O模式

  • 对于一次IO访问(以read为例),数据会先被拷贝到操作系统内核的缓冲区,然后才会从操作系统内核的缓冲区拷贝到应用程序的缓冲区,最后交给进程。所以说,当一个read操作发生时,它会经理两个阶段:
    • a. 等待数据准备
    • b. 将数据从内核拷贝到进程中

五、多路IO复用

  • 所谓的多路IO复用,就是:

    多个顾客点餐,把订单交给同一个服务员,这个服务员把订单分发 给多个厨师。

   顾客       服务员       后厨

    o-->                -->o 
        ↓              ↑  
    o-->-----> O ->------->o
        ↑              ↓
    o-->                -->o 

六、 CPU亲和

  • 把CPU内核和nginx的工作进程绑定在一起,让每个worker进程固定在一个CPU上执行,从而减少CPU的切换并提高缓存命中率,提高性能

七、sendfile

  • sendfile 零拷贝传输

    • 首先,内存分为内存空间和用户空间(如果是4G内存,那么分别为1G和3G)
    • 那么用户要读一个文件:
      • 首先,请求发给内核,内核再发给用户空间
      • 然后用户空间处理完后,将内容发给内核空间,内核空间再发给用户
    • 那么如果是sendfile,
      • 假如是读取一个静态文件,静态文件是在硬盘上的,硬盘谁可以读?内核可以读,那么也就不需要用户空间处理。
      • 也就是说,用户读一个静态文件(比如.css),直接请求给内核,内核直接把文件返给用户了。不经过用户空间。
  • 动静分离

    • 静:静态内容
      • 比如html、css、js
      • nginx直接让内核空间把文件读出来返给用户,不经过用户空间
    • 动:动态内容
      • 比如需要经过应用程序处理的内容,比如注册、登陆
      • nginx让内核接受用户请求,再转交给用户空间,用户空间处理后,返回给内核,内核再返给用户
  • nginx就是实现了动静分离

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值