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

企业网站的切片怎么做笔记本电脑做网站比较畅快

企业网站的切片怎么做,笔记本电脑做网站比较畅快,163邮箱注册登录口,做出个人网站什么水平I/O密集型进程和CPU密集型进程 聊天应用程序、MMO#xff08;大型多人在线#xff09;游戏、金融交易系统、等实时服务需要处理大量并发流量和实时数据。 这些服务是I/O密集型的#xff0c;因为它们花费大量资源处理输入输出操作#xff0c;例如高吞吐量、低延迟网络通信…I/O密集型进程和CPU密集型进程 聊天应用程序、MMO大型多人在线游戏、金融交易系统、等实时服务需要处理大量并发流量和实时数据。 这些服务是I/O密集型的因为它们花费大量资源处理输入输出操作例如高吞吐量、低延迟网络通信客户端与服务器以及其他应用程序组件之间、实时数据库写入、文件 I/O、与第三方 API 的通信、流式传输实时数据等等。 通常IO 密集型进程的性能取决于服务器的I/O系统I/O中如写数据到磁盘的任何延迟都可能导致系统瓶颈。在I/O密集型进程中CPU使用率相对较少它需要等待I/O过程完成才能执行某个进程。 而在CPU密集型进程中性能主要取决于CPU的速度。系统大部分时间都花在执行 CPU 中的进程上而不是与外部组件通信。CPU性能越好系统性能就越好。 如上所述实时并发应用程序中的关键进程例如高吞吐量网络操作、数据库写入、组件间通信等会由于 IO 操作而引入系统延迟。 为了保证低延迟不同 的Web 框架利用不同的策略例如非阻塞 IO、单线程架构的异步事件处理、参与者模型、反应式编程等来实现可扩展的实时服务。 在本文中将讨论 NodeJS的单线程事件循环模型架构来处理大量 IO 密集型进程。 让我们开始吧。 在深入研究单线程架构之前让我们先了解一下传统的基于线程请求的模型存在的问题。 基于线程的同步模型的 IO 瓶颈 在传统的基于线程的同步模型中应用服务器利用该模型来处理客户端请求时对于 I/O 密集型应用服务会面临请求吞吐量瓶颈。 以Apache Tomcat服务器为例它会维护一个线程池当它接收到客户端请求时该请求会被分配给线程池中的一个工作线程来处理详细流程如下 客户端发送一个请求到Web服务器Web服务器收到请求后从线程池中选择一个空闲可用的线程用于处理该请求此线程读取客户端请求处理客户端请求执行阻塞的IO操作(如果需要)和准备响应此线程将准备好的请求发送回Web服务器Web服务器又将此响应发送到相应的服务器。 服务器为所有客户端执行以上步骤为每一个客户端请求尽量分配一个线程如果线程池可用线程数少于并发请求数时则在使用完所有线程之后剩余的客户端请求会在队列中等待。 而在I/O密集型应用中大多数请求都会执行 IO 操作例如向数据库发出查询。在这种情况下只要来自服务器的请求正在等待来自数据库的响应该工作线程就会暂时被阻塞。它无法处理对服务器的其他请求。 因此如果这些线程中有大量的阻塞IO操作(例如:和数据库、文件系统、外部服务等交互)那么剩余的客户端将会等待很长的时间。 可用看出在高并发流量的 I/O 密集型应用中这种线程阻塞行为会导致资源争用、并发性降低和性能瓶颈。 解决 IO 瓶颈问题 不同的编程语言和各自生态系统会采用一些异步方法单线程事件循环模型、Actor模型、响应式来解决同步请求阻塞问题。本文主要介绍NodeJS的架构和单线程事件循环模型。 NodeJS 从最基本的设计出发目的就在于通过其单线程事件循环架构以最小的开销高效处理大量并发请求和异步 IO 操作。作为主线程处理所有客户端请求并将所有 IO 操作委托给其它线程详细流程如下。 客户端发送请求到Web服务器NodeJS的Web服务器在内部维护一个有限的线程池以便为客户端请求提供服务NodeJS的Web服务器接收这些请求并将它们放入队列Event Queue中。 它被称为“事件队列”NodeJS的Web服务器内部有一个组件称为“事件循环Event Loop Single Thread”从英文名可以看出事件循环只使用到了一个线程使用无限循环来接收请求并处理它们。它是NodeJS的处理模型的核心事件循环回去检查是否有客户端的请求被放置在事件队列中。如果没有会一直等待事件队列中存在请求。如果事件队列中有需要处理的客户端请求则会从事件队列中选择一个请求。 在事件循环线程处理客户端请求时根据请求的类型有不同的处理方式 如果该客户端请求不需要任何阻塞IO操作则处理所有内容准备响应并将其发送回客户端如果该客户端请求需要一些阻塞IO操作例如与数据库文件系统外部服务交互就会从从内部线程池获取一个可用的线程并将此客户端请求分配给该线程这个内部线程池的线程负责接收该请求处理该请求执行阻塞IO操作准备响应并将其发送回事件循环事件循环依次将响应发送到相应的客户端 以上图为例Web服务器内部维护着一个有限的线程池线程池中线程数量为m个NodeJS的Web服务器接收到Client-1, Client-2, …, Client-n的请求后将请求放入到事件队列中NodeJS的事件循环从队列中开始拾取这些请求以Client-1的请求和Client-3为例。 对于Client-1的请求 事件循环检查Client-1 Request-1是否确实需要任何阻塞IO操作或者需要更多时间来执行复杂的计算任务由于此请求是简单计算和非阻塞IO任务因此不需要单独的线程来处理它事件循环处理该请求所需要的操作准备其响应Response-1事件循环发送Response-1到Client-1 对于Client-3的请求 检查Client-n Request-n是否需要任何阻塞IO操作或花费更多时间来执行复杂的计算任务由于此请求有非常复杂的计算或阻塞IO任务因此事件循环不会处理此请求事件循环从内部线程池中获取线程T-1并将此Client-n Request-n分配给线程T-1线程T-1读取并处理Request-n执行必要的阻塞IO或计算任务最后准备响应Response-n线程T-1将此Response-n发送到事件循环事件循环依次将此Response-n发送到Client-n 举个生活中的案例以大排档点餐为例大排档有已经做好的熟食此外还可以根据顾客的要求现做服务员事件循环在一个时间段内只能处理一个顾客的点餐请求事件队列中的任务。每当一个顾客点完餐服务员就会检查下菜单如果顾客点的是熟食没有阻塞的I/O任务服务员直接把菜端给客户就行了直接处理但是如果顾客点的是现做的食物那么服务员就选一个空闲的厨师内部线程池中可用的线程将顾客的需求转给他等厨师做好后递给服务员服务员再端给客户。 为了加深理解这里有个简单的代码示例 public class ThreadPoolEventLoop {private final QueueRunnable eventQueue new LinkedBlockingQueue(); 创建一个固定大小为3的线程池private final ExecutorService threadPool Executors.newFixedThreadPool(3); public void startEventLoop() {while (true) {Runnable event;synchronized (eventQueue) {event eventQueue.poll(); // 从队列中取出事件}if (event ! null) {// 判断事件是否是 I/O 阻塞任务if (isIOBound(event)) {threadPool.submit(event); // 使用线程池提交 I/O 阻塞任务} else {event.run(); // 处理非阻塞任务}} else {try {Thread.sleep(100); // 如果没有事件等待} catch (InterruptedException e) {Thread.currentThread().interrupt();}}}}// 模拟判断事件是否是 I/O 阻塞任务的方法private boolean isIOBound(Runnable event) {// 这里可以根据具体的业务逻辑判断事件是否是 I/O 阻塞任务// 此处简单地假设所有事件都是非阻塞的return false;}public void registerEvent(Runnable event) {synchronized (eventQueue) {eventQueue.offer(event); // 将事件添加到队列尾部}}public static void main(String[] args) {ThreadPoolEventLoop eventLoop new ThreadPoolEventLoop();// 注册几个简单的事件其中一个模拟 I/O 阻塞任务eventLoop.registerEvent(() - System.out.println(Event 1 executed));eventLoop.registerEvent(() - System.out.println(Event 2 executed));eventLoop.registerEvent(() - System.out.println(Event 3 executed));// 启动事件循环eventLoop.startEventLoop();} }//输出 Event 1 executed Event 2 executed Event 3 executed
http://www.tj-hxxt.cn/news/130416.html

相关文章:

  • 光电网站建设城乡与建设部网站首页
  • 做简单网站后端需要学什么企业网站建设一般要素包含哪些
  • 网站优化seo互联网保险发展现状分析
  • 陕西建设网站电子政务大厅wordpress 安全防护
  • 外国个人主页网站欣赏wordpress中文怎么设置中文
  • 空港经济区内的建设工程网站济南wordpress 建站
  • 财政局网站开发合同安徽网站建设系统
  • 长春地区网站建设亚星网站代理
  • 北辰苏州网站建设文化馆的网站怎么建设
  • 进口网站建设重庆江北网站建设公司
  • php模板网站一般使用的分辨率的显示密度是多少dpi?
  • 做网站的群建立网站第一步
  • js网站开发教程网站开发线上
  • 百度安全网站检测北京建王园林工程有限公司
  • 外贸cms建站宣传型商务网站
  • flash企业网站熵网站
  • 北京的网站建设收费标准广推科技(北京)有限公司
  • 做生意在哪个网站做如何分析网站建设
  • 清华大学有关网站建设的书做哪个网站零售最好
  • 可做长图的网站织梦如何做中英文网站
  • 优秀的字体设计网站自建域名
  • 中恒诚信建设有限公司网站360街景地图最新版
  • 大型网站架设需要考虑哪些问题淘宝怎么做引流和推广
  • 做网站电话说辞怎么买到精准客户的电话
  • 滁州做网站的公司微信分销系统有哪些平台
  • 机关网站建设和运行情况汇报电子商务网站建设的难点
  • 网站源码商城网站服务公司有哪些
  • 开题报告旅游网站开发3d建模需要什么学历
  • 决定网站打开的速度吗网站被做站公司贩卖
  • 甘肃机械化建设工程有限公司网站赣州章贡区哪里要招工