1.正向代理:代理的是客户端,一般有明确的访问对象
比如:我现在通过v-p-n去访问YouTube,那么就是正向代理。
2.反向代理:代理的是服务器
最常见的就是web中,nginx去代理一群后端的服务器。
3.负载均衡:在反向代理的基础上,
比如:后代集群每一台机器的处理能力不同,nginx根据配置权重,请求来了去分一个机器处理。
--------------------
共享内存中的锁
----------------------------------
通过master启动worker,master负责listen,worker负责accept
模块化架构:
不同阶段对应不同的钩子函数。
void* ctx表示上下文?
worker中的锁:
主线程通过epoll感知任务。
线程池负责处理任务
完成队列
------------------
锁的分类:
互斥锁。
自旋锁: 适合push和pop这种很轻量级的,这样子可以避免cpu上下文切换。
读写锁。
条件变量:在单进程内,信号量能解决的问题,条件变量都可以解决。
比如可以实现:任务少的时候休眠,任务多的时候唤醒。
但是只能解决多线程之间的互斥问题。
信号量:可以解决多进程的问题。