作者回复: 你是说最多65535并发连接吗?不对,Linux句柄数可以很大(千万级)。每个TCP连接是一个四元组,即使端口的限制是65535,但算上两个端口两个IP,可认为没有限制。
当Nginx作为反向代理,且上游仅一台主机一个IP一个端口(例如80),此时四元组里有3个固定了(两个IP一个端口),这个时候可以认为最多65535个并发连接。
作者回复: 最新的,时效性最好.
作者回复: 不会,post请求数据量虽然很大,但是TCP协议层会把它切到很小的粒度,每个报文最大的大小为MSS,可以用tcpdump抓包查看,所以每处理完一个连接的若干个报文(由缓冲区及网络决定)消耗时间很短。
作者回复: 是的,第5部分有一节课会分析这一流程。简单来说,就是写缓冲区因为收到对方发来的ACK确认报文释放了出来,或者是三次握手时收到SYN+ACK后可以发送请求了。
作者回复: 不明觉厉。。。
作者回复: 没明白问题是什么,没完整吧?
作者回复: 是的,任何阻塞操作都有可能。不过写磁盘都是写到内存里,由内核异步写到磁盘上,一般不会阻塞
作者回复: 其实这幅官方图片想表达的是,首先由kernal生成一组事件,依次处理的过程中,可能还会生成新的事件,会放入post队列中,然后再去处理post队列中的所有ready事件后,再回到等待连接事件,也就是epoll_wait上
作者回复: 每次处理事件时,先处理epoll即操作系统生成的事件,再处理Nginx自身生成的事件
作者回复: 单线程
作者回复: 这个问题太模糊了。比如你要加个定时事件,那么Nginx中的定时器就可以,它是在epoll事件执行完后去遍历红黑树的,在Openresty中的timer.at这个API就是这么做的。epoll是linux提供的系统调用,不能随意定义。
作者回复: 不太明白你所说的网络路由服务具体指什么?反向代理吗?nginx很适合做反向代理,第4部分的课程都是在介绍相关知识。
作者回复: 是由操作系统的调度系统来切换的。有本书推荐你看下《linux内核设计与实现》,第4章,对切换讲的很清楚。