【nginx学习笔记】

1.正向代理:代理的是客户端,一般有明确的访问对象

比如:我现在通过v-p-n去访问YouTube,那么就是正向代理。

2.反向代理:代理的是服务器

最常见的就是web中,nginx去代理一群后端的服务器。

3.负载均衡:在反向代理的基础上,

比如:后代集群每一台机器的处理能力不同,nginx根据配置权重,请求来了去分一个机器处理。

--------------------

共享内存中的锁

【nginx学习笔记】_第1张图片

----------------------------------

通过master启动worker,master负责listen,worker负责accept

模块化架构:

        不同阶段对应不同的钩子函数。

        void* ctx表示上下文?

worker中的锁:

        主线程通过epoll感知任务。

        线程池负责处理任务

        完成队列

------------------

锁的分类:

        互斥锁。

        自旋锁: 适合push和pop这种很轻量级的,这样子可以避免cpu上下文切换。

       读写锁。

        条件变量:在单进程内,信号量能解决的问题,条件变量都可以解决。

                比如可以实现:任务少的时候休眠,任务多的时候唤醒。

                但是只能解决多线程之间的互斥问题。

        信号量:可以解决多进程的问题。

        

--------------------

高性能服务器影响因素:

        内存池:大量的请求下,波动很小。

        锁:互斥锁(会 引起上下文切换)和spinlock(浪费一点cpu,但是不切换)

----------------

一个好的开源项目,以nginx为例子:

     1.代码可读性好

     2.性能高、稳定性强、内存池、http协议

     3.文档齐全,社区维护较好

     4.代码迭代很频繁

     5.代码结构稳定,写代码的人有一定的预见能力,应对后续的变更,代码结构基本不变。

你可能感兴趣的:(#,nginx,nginx)