• 华仔
    2018-11-15
    老师讲的真好,就是有点快

    作者回复: 语速有些快吗? 如果是这样, 接下来的课程我会尽量放慢语速

    
     16
  • 刘义方
    2018-11-23
    关于nginx请求切换,是在worker进程下进行线程切换?

    作者回复: 是的

    
     2
  • oldman
    2019-07-13
    老师,那这里是不是可以理解为通过程序代码完成的请求切换,而非进程切换,还是同一个进程。谢谢老师,配合您的书看着真的都能捋顺了。

    作者回复: 对的,这就是epoll+异步编程

    
     1
  • oldman
    2019-07-12
    老师,请教个问题,这里说NGINX在用户态完成进程切换,但是用户态的进程切换也是需要消耗CPU资源的吧?有点疑惑。

    作者回复: 纠正下,在用户态完成请求切换。
    所有切换都消耗CPU资源,请求切换在用户态完成最大的价值在于:如果基于LWP线程切换实现请求切换,会有以下问题:
    1、每个线程的栈消耗空间过大
    2、切换线程成本要更大,而总成本随着线程数量增长呈指数级上升
    3、阻塞IO调用产生的时间成本
    4、内核态与用户态数据的拷贝成本

    
     1
  • kings
    2019-03-27
    对每一个进程,有一个整型static_prio表示用户设置的静态优先级,内核里它与nice值是对应的,nice值其实就是优先级针对用户进程的另一种表示法,nice的取值范围是-20到+19,-20优先级最高,+19最低。
    
     1
  • Adam
    2019-01-23
    进程上下文切换次数较多的情况下,可能导致 CPU 将大量时间耗费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,缩短了真正运行进程的时间。系统的整体负载也会变高。所以apache这种基于prefork一个进程处理一个连接的模型,不能支撑较大的并发数。
    
     1
  • 高枕
    2018-11-19
    请问什么是用户态?什么是内核态?何谓边缘触发?

    作者回复: 操作系统为提升可靠性,将应用程序操作内存称为用户态,OS本身为内核态。边缘触发相对水平触发而言,是epoll的两种触发方式。

    
     1
  • 小黄同志
    2018-11-15
    老师介绍一下边缘触发 水平触发。nginx用的哪个。为什么这么用。还有epoll wait返回的句柄没有经历内核态 用户太切换吧。它们不是用的共享内存吗?

    作者回复: 先回答第1个:边缘触发性能更好,但对代码要求更高,需要处理更多的异常情况。nginx用的是边缘触发,因为这样减少了不必要的socket唤醒。
    第2个:epoll wait是系统调用,所有的系统调用都需要做用户态与内核态间的切换,因为内核态的地址空间与用户态不同,这是为了内核的可靠性与安全性考虑设计的。

    
     1
  • Panda
    2019-10-17
    您好,我想问一下视频中说的到“我们接收到请求“,“我们大致知道要把请求发送至哪台上游服务器”等等,这里的“我们”值得是什么?nginx?还是服务器?

    作者回复: 第几分几秒能标识下吗?不好意思,习惯性说“我们”,没明确主语

    
    
  • Geek_涛
    2019-09-10
    请问老师 在3分22秒的时候的,‘这样我们静态??比较高的时候’,其中的问号处说的是什么?听了好几遍,都听不清。

    作者回复: 静态优先级。Sorry,确实说得太快了:-)

    
    
  • amazelong
    2019-07-12
    老师好,nginx用户态请求切换,有些迷惑,处理不同请求时,应该是事件触发的吧,会有epoll相关的系统调用吧,怎么是用户态的呢

    作者回复: 这里指与每个线程同一时间只处理一个请求,基于线程调度实现请求切换而言。
    比如,epoll一次返回100个ready状态的socket,那么可以在用户态一次完成100个请求的切换,不产生主动线程切换。

    
    
  • WL
    2019-04-23
    请问老师上一节讲的Nginx每次处理的连接数量是比较有限的, 一般只有几百个, 按照这个量级的连接数来看, OS的进程调度应该也可以应对, 为什么把线程切换作为Nginx性能优化的着力点呢?

    作者回复: 1、每次处理几百个,但总并发连接数可能是几万个。
    2、Nginx与OS一样,都是用一个线程处理几万个连接,而如Tomcat等应用程序是1个线程1个连接的处理业务逻辑,这是最大的不同。

    
    
  • 尹瑞
    2019-03-29
    老师,有个简单的例子吗
    
    
  • Hana
    2019-03-17
    老师好,不太明白您在留言中的回复:1、在Linux中,线程与进程在调度上没有差别,所以process和线程可视为等价。
    2、nginx不是多线程程序(thread pool除外,它仅处理AIO读取,参见第132课),在一个worker进程内,它只有1个线程。所谓用户态切换,就是指epoll+无阻塞的事件驱动的方式来切换请求。它相对于1个线程同一时间只处理1个请求的方式。

    作者回复: 这2个问题都需要阅读内核知识才能明白,推荐你学习《Linux内核设计与实践》一书。

    
    
  • 兴国
    2019-03-09
    老师你好
    一个worker进程内,它只有1个线程,一个worker内又实现了线程切换,这2个点似乎是有矛盾的,具体的差别在哪里

    作者回复: 本节课中,没有谈到Nginx的多线程特性。

    
    
  • 啊啊啊哦哦
    2019-01-31
    老师你好。左图上面写的是process进程 右图 又写着一线程同时处理多个请求 是一线程。还是 一进程多线程下同时处理多个请求? 还有你说的是 在用户态进行切换。 nginx。线程间的切换 不需要到内核态吗。

    作者回复: 1、在Linux中,线程与进程在调度上没有差别,所以process和线程可视为等价。
    2、nginx不是多线程程序(thread pool除外,它仅处理AIO读取,参见第132课),在一个worker进程内,它只有1个线程。所谓用户态切换,就是指epoll+无阻塞的事件驱动的方式来切换请求。它相对于1个线程同一时间只处理1个请求的方式。

    
    
我们在线,来聊聊吧