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

网站中文域名到期有没有影响太原网站建设总部在哪

网站中文域名到期有没有影响,太原网站建设总部在哪,外链网站是什么,宣传策划方案模板本文很长哦#xff0c;但请给我一点时间。通常#xff0c;我们的应用程序不需要并行处理成千上万的用户#xff0c;也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户#xff0c;就可以在内部应用程序或某些微服务应用程序中承受如此大的负…本文很长哦但请给我一点时间。通常我们的应用程序不需要并行处理成千上万的用户也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户就可以在内部应用程序或某些微服务应用程序中承受如此大的负担。在这种情况下我们可以使用某些高级框架/库这些框架/库在线程模型/使用的内存方面没有得到优化并且仍然可以承受一些合理的资源和相当快的交付时间。然而有时我们会遇到这样的情况我们的系统的一部分需要比其他应用程序更好地扩展。用传统的方法或框架编写系统的这一部分可能会导致巨大的资源消耗并且需要启动同一服务的许多实例来处理负载。导致处理成千上万个连接的算法和方法也被称为C10K问题。在本文中我将主要关注在TCP连接/流量方面可以进行的优化以优化微型服务实例以尽可能少地浪费资源深入了解操作系统如何与TCP和Sockets一起工作以及最后但并非最不重要的是如何深入了解所有这些事情。我们开始吧。I/O编程策略让我们描述一下我们目前拥有什么类型的I/O编程模型以及在设计应用程序时需要从哪些选项中进行选择。首先没有好的或坏的方法只有更适合我们当前用例的方法。选择错误的方法在将来会产生非常不方便的后果。它可能导致资源浪费甚至从头开始重新编写应用程序。带阻塞处理的阻塞I/O每个连接服务器的线程数这种方法背后的想法是如果没有任何专用/空闲线程就不接受套接字连接稍后我们将展示它的含义。在这种情况下阻塞意味着特定的线程被绑定到连接并且总是在读取或写入连接时阻塞。public static void main(String[] args) throws IOException {try (ServerSocket serverSocket new ServerSocket(5050)) {while (true) {Socket clientSocket serverSocket.accept();var dis new DataInputStream(clientSocket.getInputStream());var dos new DataOutputStream(clientSocket.getOutputStream());new Thread(new ClientHandler(dis, dos)).start();}} }最简单的套接字服务器版本从端口5050开始以阻塞的方式从InputStream读取并写入OutputStream。当我们需要通过一个连接传输少量对象时很有用然后在需要时关闭它并启动一个新的对象。即使没有任何高级库它也可以实现。使用阻塞流进行读/写等待阻塞InputStream读操作该操作按当时TCP接收缓冲区中可用的字节填充提供的字节数组并返回字节数或-1-流的结尾和消耗字节直到我们有足够的数据来构造请求。当我们开始为无边界的传入连接创建线程时会出现一个大问题和效率低下。我们将为非常昂贵的线程创建和内存影响付出代价这与将一个Java线程映射到一个内核线程是密不可分的。它不适合“真正的”生产除非我们真的需要一个内存占用率低的应用程序并且不想加载属于某些框架的很多类。带阻塞处理的非阻塞I/O基于线程池的服务器这是大多数知名企业HTTP服务器所属的类别。一般来说该模型使用多个线程池使多cpu环境下的处理更高效更适合企业应用程序。有几种方法可以配置线程池但基本思想在所有HTTP服务器中是完全相同的。请参阅HTTP Grizzly I/O策略了解通常可以根据基于线程池的非阻塞服务器配置的所有可能策略。用于接受新连接的第一个线程池。如果一个线程能够管理传入连接的速度它甚至可以是一个单线程池。通常有两个积压可以填补和下一个传入连接拒绝。如果可能请检查是否正确使用了持久连接。用于以非阻塞方式选择器线程或IO线程从/写入套接字的第二个线程池。每个选择器线程处理多个客户端通道。第三个线程池用于分离请求处理的非阻塞部分和阻塞部分通常称为工作线程。某些阻止操作无法阻止选择器线程因为所有其他通道都无法取得任何进展通道组只有一个线程此线程将被阻止。非阻塞读/写是使用缓冲区实现的只要处理请求的特定线程不满意因为它们没有足够的数据来构造例如HTTP请求选择器线程就会从套接字读取新字节并写入专用缓冲区池缓冲区。我们需要澄清非阻塞术语我们在Socket服务器的上下文中对话那么非阻塞意味着线程没有绑定到打开的连接并且不等待传入的数据甚至在TCP发送缓冲区已满的情况下写入数据只要尝试读取如果没有字节那么就不会将任何字节添加到缓冲区中以进行进一步处理构造请求给定的选择器线程将继续从另一个打开的连接读取。 然而在处理请求方面代码在大多数情况下是阻塞的这意味着我们执行一些代码来阻塞当前线程这个线程等待I/O绑定处理数据库查询、HTTP调用、从磁盘读取等或一些长时间CPU绑定处理计算哈希/阶乘加密挖掘…。如果执行完成则会唤醒线程并在某些业务逻辑中继续执行。业务逻辑的阻塞特性是工作池如此庞大的主要原因我们只需要让大量线程发挥作用来提高吞吐量。否则在负载较高的情况下例如更多的HTTP请求我们可能会导致所有线程都处于阻塞状态并且没有可用于请求处理的线程没有处于可运行状态的线程可以在CPU上执行。优势即使请求的数量相当高并且我们的许多工作线程在某些阻塞操作上被阻塞我们也能够接受新的连接即使我们可能无法立即处理它们的请求并且数据必须在TCP接收缓冲区中等待。这种编程模型被许多框架/库Spring ControllersJersey…和HTTP服务器JettyTomcatGrizzly…暗中使用因为它非常容易编写业务代码如果真的需要的话让线程阻塞。缺点并行性通常不是由CPU的数量决定的而是由阻塞操作的性质和工作线程的数量限制的。一般来说这意味着如果阻塞操作I/O和进一步执行在请求过程中的时间比率过高那么我们可以得到阻塞操作数据库查询…上的许多阻塞线程 等待处理工作线程的大量请求以及由于没有线程可以继续执行而非常未使用的CPU较大的线程池导致上下文切换和CPU缓存的低效使用如何设置线程池好的我们有一个或多个线程池来处理阻塞的业务操作。但是线程池的最佳大小是多少我们可能会遇到两个问题线程池太小我们没有足够的线程来覆盖所有线程被阻塞的时间比如说等待I/O操作而您的CPU没有得到有效使用。线程池太大我们要为很多实际空闲的线程付出代价见下面运行很多线程的代价。我觉得可以参考Brian Goetz的一本书Java并发实践书中说调整线程池的大小并不是一门精确的科学它更多的是关于理解您的环境和任务的性质。您的环境有多少CPU和多少内存任务主要执行计算、I/O或某种组合吗它们是否需要稀缺资源JDBC连接线程池和连接池会相互影响当我们充分利用连接池时增加线程池以获得更好的吞吐量可能没有意义。如果我们的程序包含I/O或其他阻塞操作您需要一个更大的池因为您的线程不允许一直放在CPU上。您需要使用一些分析器或基准来估计等待时间与计算任务时间的比率并观察生产工作负载不同阶段高峰时间与非高峰时间的CPU利用率。非阻塞处理的非阻塞I/O基于与CPU核心相同的线程数的服务器如果我们能够以非阻塞的方式管理大部分工作负载那么这种策略是最有效的。这意味着处理套接字接受连接、读、写是使用非阻塞算法实现的但即使是业务处理也不包含任何阻塞操作。这个策略的典型代表是Netty框架所以让我们深入了解一下如何实现这个框架的架构基础以了解为什么它最适合解决C10K问题。如果您想详细了解它的工作原理那么我可以推荐以下资源Netty in Action——作者是诺曼·莫尔。由Netty Framework Norman Mauer的作者撰写。这是了解如何使用具有各种协议的处理程序基于Netty实现客户端或服务器的宝贵资源。具有异步编程模型的I/O库Netty是一个I/O库和框架它简化了非阻塞IO编程并为服务器生命周期和传入连接期间发生的事件提供了异步编程模型。我们只需要用我们的lambdas连接回拨我们就可以免费得到所有东西。很多协议都可以在不依赖于某个大型库的情况下使用开始用纯JDK NIO构建应用程序是非常令人沮丧的但Netty包含的特性使程序员保持在较低的级别并提供了使许多事情更高效的可能性。Netty已经包含了大多数众所周知的协议这意味着我们可以比在更高级别的库例如Jersey/Spring MVC for HTTP/REST中使用大量样板文件更有效地使用它们。识别正确的非阻塞用例以充分利用Netty的能力I/O处理、协议实现和所有其他处理程序都应该使用非阻塞操作来永不停止当前线程。我们总是可以使用额外的线程池来阻塞操作。但是如果我们需要将每个请求的处理切换到专用的线程池来执行阻塞操作那么我们几乎没有使用Netty的功能因为我们很可能会遇到与非阻塞IO相同的情况即阻塞处理-一个大的线程池正好位于应用程序的不同部分。在上图中我们可以看到Netty架构的主要组件EventLoopGroup-收集事件循环并提供要注册到其中一个事件循环的通道。event loop-处理给定事件循环的已注册通道的所有I/O操作。EventLoop只在一个线程上运行。因此对于一个EventLoopGroup事件循环的最佳数量是cpu的数量有些框架在出现页面错误时使用多个cpu1来拥有额外的线程。管道-保持处理程序的执行顺序当发生某个输入或输出事件时排序和执行的组件包含实际的业务逻辑。管道和处理程序在属于EventLoop的线程上执行因此处理程序中的阻塞操作会阻塞给定EventLoop上的所有其他处理/通道。分享就到这啦希望大家能关注哦。等着你们发表不同意见来讨论。
http://www.zqtcl.cn/news/106934/

相关文章:

  • jfinal网站开发装修公司加盟哪家最好
  • 成都个人网站制作石家庄设计网站公司
  • 阿里巴巴网站本土化建设烟台市两学一做网站
  • 潍坊品牌网站建设公司旅游类作业网站
  • 建设谷歌公司网站费用求职seo推荐
  • 企业网站建设规划ppt企业网站前端模板下载
  • 补习吧 一家专门做家教的网站百度云搜索引擎入口网盘搜索神器
  • 网站建设与制作企业嘉鱼网站建设哪家专业
  • 电脑怎么做网站赚钱柳州柳北建设局网站
  • 农村服务建设有限公司网站设计基础网站推荐
  • 做网站的编程语言组合ppt模板免费的网站推荐
  • 泰安企业建站公司流程上海营销型网站报价
  • 网站承载量怎么做福州公交集团网站建设
  • 新吴区住房和建设交通局网站小程序商城哪家好排行榜
  • 中小学网站建站模板长春火车站咨询电话
  • c2c网站特点公司网站建设亚运村
  • 邢台wap网站建设费用黑帽seo之搜索引擎
  • 如何用阿里云做网站刷题网站怎么做
  • 织梦制作手机网站上海猎头公司名单
  • 免费生成图片的网站wordpress 购物
  • 江西建设部网站国际新闻最新消息今天2023
  • 怎么做网站啊wordpress英文显示改中文
  • 建筑专业网站有哪些网站标题seo外包优化
  • 浙江建设厅网站施工员报名中国建设协会官网站
  • 网站建设优化是干嘛上海今天最新的新闻
  • 网站大全浏览器软文的概念
  • 盐山做网站价格莱芜征婚吧
  • 具有品牌的微网站建设网站设计培训班前台
  • 网站推广工具推荐html网站地图在线生成
  • 成都本地网站建设青岛电子商务的网站建设