当前位置: 首页 > news >正文

桂林网站设计公司北京通州网站制作公司

桂林网站设计公司,北京通州网站制作公司,泰州专一做淘宝网站,注册会计师报名时间注#xff1a;文章是4年前在自己网站上写的#xff0c;迁移过来了。现在看我之前写的这篇文章#xff0c;描述得不是特别详细#xff0c;但描述了Nginx的整体架构思想。如果对Nginx玩得透得或者想了解深入的#xff0c;可以在网上找找其他的文章。 ......................…          注文章是4年前在自己网站上写的迁移过来了。现在看我之前写的这篇文章描述得不是特别详细但描述了Nginx的整体架构思想。如果对Nginx玩得透得或者想了解深入的可以在网上找找其他的文章。 ...................................................................分割线........................................................................... Nginx实现高并发的模型是多进程IO多路复用的方式实现了系统的异步非阻塞IO。 其实乍看到这是有些疑惑的。使用的epoll这种IO多路复用方式OS层本身是同步非阻塞的那为什么说实现了异步呢。这就跟Nginx的实现机制有关系了。关于IO多路复用可见 并发编程之I/O多路复用 Nginx的多进程模型是一个master多个worker。master的作用主要是创建管理子进程worker。之前写过一篇关于gunicorn介绍的其进程模型也是采用了相同的思想只是每个worker的处理方式不同。具体可见 Gunicorn介绍 当启动Nginx时,master进程建立了socket文件描述符然后pre-fork出子进程子进程会继承master的socket并执行accept开始listen。 刚才说了,master不负责处理客户端的request请求。真正处理请求的是worker。当有request到来时会有一个worker进程采用IO多路复用的机制进行处理。 master的主要作用 接收来自外界的信号; 比如我们在kill进程时可以直接kill主进程。向各个worker进程发送信号;监控worker进程状态;当worker退出后(异常情况下),自动重新启动新的worker进程 来一张网络上请求处理的示意图 那么现在问题来了因为同时有多个woker都在监听那如何保证同时只有一个worker处理不会同时唤起所有worker引起惊群效应呢 nginx引入了一个叫accept_mutex的互斥锁同一时刻可以保证只有一个worker获取到互斥锁只有成功获得锁的worker才可以accept请求执行后续的请求处理流程同时ngx_accept_disabled减1。accept处理完之后会释放锁。如果某个worker的队列中连接数已经超过了最大连接的7/8就不再accept请求。 关于nginx的accep_mutax具体可参考 accept_mutex与性能的关系 (nginx) 不过对于只有几个worker的时候互斥锁没必要打开就算是多个worker去竞争所带来的消耗也没有多大。此外对于长连接可能会导致某个worker长时间占用锁拖垮整个nginx的性能。 其实后来nginx还引入了两种方式EPOLLEXCLUSIVE和SO_REUSEPORT不过这个还要依赖于操作系统的支持。SO_REUSEPORT这个应该在Netty中应该都见过它会允许多个进程绑定到同一个socket上相互独立。内核会自动实现多个进程的负载均衡。具体可参考 惊群和OP_REUSEPORT Nginx是基于事件驱动的一个请求过程可以根据事件的触发方式划分为多个阶段每个阶段都可以由事件收集、分发器来触发。 比如一个请求的读阶段被一个读消费者处理之后然后就进入空闲状态去处理其他请求片段。等下一次事件出现时事件分发器会调用事件消费者去处理。这里需要注意的是虽然一个请求分了很多阶段但他们都是在同一个worker内的。 可以看到通过这种方式Nginx的IO多路复用不出现空闲事件间接上实现了异步非阻塞是框架层面实现的异步而非OS层面epoll的同步。 下面代码展示了Nginx主要处理请求的大致过程 for( ; ; ) // 无限循环 {nfds epoll_wait(epfd,events,20,500); // 最长阻塞 500sfor(i0;infds;i){if(events[i].data.fdlistenfd) //有新的连接{connfd accept(listenfd,(sockaddr *)clientaddr, clilen); //accept这个连接ev.data.fdconnfd;ev.eventsEPOLLIN|EPOLLET;epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,ev); //将新的fd添加到epoll的监听队列中}else if( events[i].eventsEPOLLIN ) //接收到数据读socket{n read(sockfd, line, MAXLINE)) 0 //读ev.data.ptr md; //md为自定义类型添加数据ev.eventsEPOLLOUT|EPOLLET;epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,ev);//修改标识符等待下一个循环时发送数据异步处理的精髓}else if(events[i].eventsEPOLLOUT) //有数据待发送写socket{struct myepoll_data* md (myepoll_data*)events[i].data.ptr; //取数据sockfd md-fd;send( sockfd, md-ptr, strlen((char*)md-ptr), 0 ); //发送数据ev.data.fdsockfd;ev.eventsEPOLLIN|EPOLLET;epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,ev); //修改标识符等待下一个循环时接收数据}else{//其他的处理}} }
http://www.w-s-a.com/news/566168/

相关文章:

  • 新网站该如何做网站优化呢网络营销网站设计
  • 旅游门户网站模板下载做策划网站推广怎么写简历
  • 建设隔离变压器移动网站wordpress动态导航
  • 平潭建设局网站中国免费素材网
  • 虚拟主机可以做视频视频网站吗做爰全过程免费的视频网站有声音
  • 专业做家电经销的网站网络管理系统有哪几部分组成
  • 自学网站编程网站名称需要注册吗
  • 网站后台管理系统怎么添加框安徽省工程建设协会网站
  • 雨花台网站建设wordpress找回
  • 四川哪家网站推广做的好网站开发人才需求
  • 什么网站可以找手工活做一站式服务平台官网
  • 做购物网站的步骤网站核心词如何做
  • 做品牌设计网站公司网站没做301怎么做301
  • 服务流程企业网站wordpress文章的使用
  • 网站开发组合淘宝网站开发选什么类目
  • 广东手机网站建设个人电脑做网站主机
  • 健身俱乐部网站开发文档建一个网站需要什么条件
  • 买的网站模板怎么做建设行政管理部门网站
  • 怎么让百度多收录网站关键词seo深圳
  • 陕西交通建设集团网站体检个人网站设计模板田田田田田田田田
  • ae模板网站推荐安徽建筑信息平台
  • 新网站建设代理商wordpress模板商店
  • 中国十大设计素材网站wordpress发布失败
  • 江西省建设监理网站网页制作与设计是什么
  • 在招聘网站做销售怎么样网址你懂我意思正能量不用下载ios
  • 高端企业网站定制公司企业网站2000元
  • 成都网站建设:河北省建设工程质量监督网站
  • 四川省建设厅官网信息查询平台北京seo关键词优化外包
  • 网站建设响应式是什么意思wordpress弹窗打开网页
  • 做美工需要参考的网站漳州做网站的公司