从IIS按期重启服务开始

 

  • 原由

  手上的项目是.NET 作的,运行在Windows服务器的IIS上。消息推送的时候有利用WebSocket像客户端推送消息,因为IIS定时会从新服务回收资源,会致使WebScoket服务重启,期间一些消息会收到影响。暂时的解决方案可使用定时计划在非高峰期回收资源(能够参考:https://www.cnblogs.com/Fishwood/p/3602041.html)html

  前端忽然问我:为何IIS会回收资源?我查了下资料说是为了保持系统的稳定性,但仍是不甚理解。前端

  • 缘由

  晚上看nginx服务器的Web请求处理机制的时候忽然获得了解答,摘抄以下:nginx

  Web服务器和客户端是一对多的关系,Web服务器必须有能力同时为多个客户端提供服务。通常来讲,完成并行处理请求工做有三种方式可供选择:多进程方式、多线程方式和异步方式。服务器

  1.多进程方式网络

   多进程方式是指,服务器每当接收到一个客户端时,就由服务器主进程生成一个子进程出来和该客户端创建链接进行交互,直到链接断开,该子进程就结束了。多线程

   多进程方式的优势在于,设计和实现相对简单,各个子进程之间相互独立,处理客户端请求的过程彼此不受干扰,而且当一个子进程出现问题时,不容易将影响扩散到其余进程中,保证了提供服务大的稳定性。当子进程退出的时候,其占用的资源就会被操做系统回收,也不会留下垃圾。而其缺点也是很明显的。操做系统中生成一个子进程须要进行内存复制等操做,在资源和时间上会产生必定的额额外开销,所以若是Web服务器接受大量并发请求,就会对系统资源形成压力,致使系统性能降低。架构

   初期的Apache服务器就是采用的这种方式对外提供服务的。为了应用大量的并发请求,Apache服务器采用了“预生成进程”的机制对多进程方式仅从了改进。“预生成进程”的工做方式是将生成子进程的时机提早,在请求还没到达前就预先生成哈,当请求到达时,主进程就分配一个子进程和该客户端进行交互,交互完成后,该进程也不结束,而是被主进程管理起来等待下一个客户端请求的到来。改进的多进程方式在必定成都上缓解了大量并发请求情形下Web服务器对系统资源形成的压力。可是因为Apache服务器在最初的架构上采用了多进程方式,所以这不能从根本上解决问题。 并发

  2.多线程方式异步

   多线程方式是指,服务器每当接收到一个客户端时,就由服务器主进程派生出一个线程出来和该客户端进行交互。性能

   因为操做系统产生一个线程的开销远小于产生一个进程的开销,因此多线程方式在很大程度上减轻了Web服务器对系统资源的要求。该方式使用线程进行任务调度,开发方面能够遵循必定的标准,这相对来讲比较规范和有利于协做。但在线程管理方面,该方式哟必定的不足。多个线程位于同一个进程内,能够访问一样的内存空间,彼此之间相互影响;同时在开发的过程当中不可避免的须要开发者本身对内存进行管理,其增长了出错的风险。服务器系统须要长时间连续不停地运转,错误的逐渐积累可能最终对整个服务器产生重大影响。

   IIS服务器使用了多线程方式对外提供服务,它的稳定性相对来讲仍是不错的,可是一般仍是会按期检查和重启服务器,以预防不可预料的故障发生。

  3.异步方式

   首先从同步、异步以及阻塞、非阻塞的概念开始:

   网络通讯中的同步机制和异步机制是描述通讯模式的概念。同步机制,是指发送方发送请求后,须要等待接收到接收方返回的响应后,才接着发送下一个请求;异步机制,和同步机制相反,发送方发出一个请求后,不等待接收方响应这个请求,就继续发送下一个请求。在同步机制中,全部的请求都在服务器端获得同步,发送方和接收方对请求的处理步调是一直的;在异步机制中,全部来自发送方的请求造成一个队列,接收方处理完成后通知发送方/

   阻塞和非阻塞用了描述进程处理调用的方式,在网络通讯中,主要指网络套接字Socket的阻塞和非阻塞方式,而Socket的实质也是IO操做。Socket的阻塞调用方式为,在结果返回以前,以前线程从运行状态被挂起,一直等到调用结果返回以后,才进入就绪状态,获取CPU后继续急性;Socket的非阻塞调用方式中,若是调用结果不能立刻返回执行下一个调用。

   事实上同步和阻塞,异步和非阻塞这两对概念存在必定的区别,不能混淆。两队概念的组合,就会产生四个新的概念:同步阻塞,异步阻塞,同步非阻塞,异步非阻塞。

   1)同步阻塞方式,发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操做若是不能立刻获得结果,就一直等到返回结束后,才响应发送方,期间不能进行其余工做。这种方式实现简单,可是效率不高。

   2)同步非阻塞方式,发送方向向接收方发送请求后,不用等待响应;接收方处理请求时进行的IO操做若是不能立刻获得结果,就当即返回,去作其余事情,但因为没有获得请求处理结果,不响应发送方,发送方一直等待。一直到IO操做完成后,接收方得到结果响应发送方后,接受方才进行下一请求过程。在实际中不实用这种方式。

   3)异步阻塞方式,发送方向接收方发起请求后,不用等待响应,能够接着进行其余工做;接收方处理请求时进行的IO操做,若是不能立刻获得结果,就一直等到返回结果后,才响应发送方。这种方式在世实际中也不实用。

   4)异步非阻塞方式,发送方向接收方发送请求后,不用等待响应,能够继续其余工做,接收方处理请求时进行的IO操做若是不能立刻获得结果,也不等待,而是立刻返回去作其余事情。当IO操做完成之后,将完成状态和结果通知接收方,接收方再响应发送方。在四种方式中,这种方式是发送方和接收方通行效率最高的一种。

   而Nginx采用的是机制是结合多进程机制和异步机制对外提供服务,采用异步非阻塞方式,能够同时处理大量并发请求。

相关文章
相关标签/搜索