• Douglas
    2019-01-17
    post请求数据量虽然很大,但是TCP协议层会把它切到很小的粒度,每个报文最大的大小为MSS,可以用tcpdump抓包查看,所以每处理完一个连接的若干个报文(由缓冲区及网络决定)消耗时间很短。
    -—————————————————-
    这个请求的数据会被切成很小,但是这个连接一直没断(网络套接字没释放),所以默认最多只能处理有65535个(Linux默认文件句柄数限制)请求,这样理解对吗?

    作者回复: 你是说最多65535并发连接吗?不对,Linux句柄数可以很大(千万级)。每个TCP连接是一个四元组,即使端口的限制是65535,但算上两个端口两个IP,可认为没有限制。
    当Nginx作为反向代理,且上游仅一台主机一个IP一个端口(例如80),此时四元组里有3个固定了(两个IP一个端口),这个时候可以认为最多65535个并发连接。

    
     3
  • 全宏
    2018-11-20
    我想学习nginx源码。新手,请问使用哪个版本的源码比较好?

    作者回复: 最新的,时效性最好.

    
     3
  • Douglas
    2019-01-14
    老师,除了消耗大量cpu 的场景会导致线程阻塞,如果读/写事件处理的数据量很大,会不会也同样导致线程阻塞,比如一个post 请求的数据很大,导致从事件队列中取得的读事件一直在读数据,使其他事件得不到处理,谢谢

    作者回复: 不会,post请求数据量虽然很大,但是TCP协议层会把它切到很小的粒度,每个报文最大的大小为MSS,可以用tcpdump抓包查看,所以每处理完一个连接的若干个报文(由缓冲区及网络决定)消耗时间很短。

    
     1
  • 独孤
    2019-01-12
    客户端建立连接,关闭连接,发送请求,对于服务器端epoll触发的都是读事件,可以认为是被动的,那么写事件是怎么触发的呢?是操作系统内核的写缓冲区控制的吗?

    作者回复: 是的,第5部分有一节课会分析这一流程。简单来说,就是写缓冲区因为收到对方发来的ACK确认报文释放了出来,或者是三次握手时收到SYN+ACK后可以发送请求了。

    
     1
  • nginx
    2018-11-27
    可以缓存吗?

    作者回复: 不明觉厉。。。

    
     1
  • 炎黄伙哥
    2019-11-12
    这节讲的设计跟java线程池的原理很相似
    
    
  • 初音未来
    2019-11-05
    老师问一下,nginx多个进程如何同一时间读取同一个文件的

    作者回复: 没明白问题是什么,没完整吧?

    
    
  • Geek_5258f8
    2019-09-21
    如果访问日志写磁盘慢,是否严重影响nginx的事件模型?

    作者回复: 是的,任何阻塞操作都有可能。不过写磁盘都是写到内存里,由内核异步写到磁盘上,一般不会阻塞

     1
    
  • Sunshine
    2019-07-21
    老师,请问下,nginx进入receive a queue of new events状态,读取读缓存队列中的数据,这时如果nginx读取的数据只包含HTTP请求的一部分,那是否会回到wait for events on connections状态继续等待,就是说nginx event loop是否应该加一条从receive a queue of new events状态到wait for events on connections状态的反向箭头?

    作者回复: 其实这幅官方图片想表达的是,首先由kernal生成一组事件,依次处理的过程中,可能还会生成新的事件,会放入post队列中,然后再去处理post队列中的所有ready事件后,再回到等待连接事件,也就是epoll_wait上

    
    
  • WL
    2019-04-17
    老师再请问一下, worker进程从操作系统事件队列中获取事件和从自己生成的事件队列中获取事件的优先级顺序是怎样的? 怎么保证每个队列的事件都会快速的处理呢?

    作者回复: 每次处理事件时,先处理epoll即操作系统生成的事件,再处理Nginx自身生成的事件

    
    
  • WL
    2019-04-17
    老师请问一下nginx在处理事件时是采用的多线程还是单线程的方式?

    作者回复: 单线程

    
    
  • 杨晓宇
    2019-01-27
    老师事件模型中除了网络事件外我们可以自己定义事件吗?类似于windows中的create_event,在某个自定义的进程中去wait

    作者回复: 这个问题太模糊了。比如你要加个定时事件,那么Nginx中的定时器就可以,它是在epoll事件执行完后去遍历红黑树的,在Openresty中的timer.at这个API就是这么做的。epoll是linux提供的系统调用,不能随意定义。

    
    
  • Francis
    2019-01-08
    老师,问一下,nginx做网络路由服务怎么做

    作者回复: 不太明白你所说的网络路由服务具体指什么?反向代理吗?nginx很适合做反向代理,第4部分的课程都是在介绍相关知识。

    
    
  • 木木匠
    2018-12-29
    老师,这个在用户态切换是如何切换的呢?

    作者回复: 是由操作系统的调度系统来切换的。有本书推荐你看下《linux内核设计与实现》,第4章,对切换讲的很清楚。

    
    
我们在线,来聊聊吧