这些你明白了么?如今来到了真正有趣的部分:我们来看看一些风行的说话对那些对象的应用,并得出关于易用性和机能之间衡量的结论,以及一些其他有趣小器械。

声明,本文中显示的示例是零碎的(单方面的,只能表现相干的信息); 数据库拜访、外部缓存体系( memcache 等等)以及任何须要 I/O 的器械都将履行某种类型的 I/O 调用,其本质与膳绫擎所示的简单示例效不雅雷同。此外,对于将 I/O 描述为“壅塞”( PHP、Java )的情况,HTTP 要乞降响应攫取和写入本身就是浊宣调用:体系中隐蔽着更多 I/O 及其伴生的机能问题须要推敲。

为一个项目选择编程说话要推敲很多身分。甚至当你只推敲效力时,也有很多身分。然则,如不雅你担心你的法度榜样将重要受到 I/O 的限制,如不雅 I/O 机能影响到项目标成败,那么这些是你须要懂得的。

早在 90 年代,很多人都穿戴 Converse 鞋,用 Perl 写着 CGI 脚本。然后 PHP 来了,就像一些人爱好咒骂的一样,它使得动态网页更轻易。

PHP 应用的模型相当简单。虽有一些进出,但你的 PHP 办事器根本上是如许:

HTTP 请求来自用户的浏览器,并拜访你的 Apache Web 办事器。Apache 为每个请求创建一个零丁的过程,有一些优化方法可以从新应用它们,以最大年夜限度地削减创建次数( 相对而言,创建过程较慢 )。Apache 调用 PHP 并告诉它运行磁盘上合适的 .php 文件。PHP 代码履行并壅塞 I/O 调用。你在 PHP 中调用 file_get_contents() ,其底层会调用 read() 体系调用处等待结不雅。

当然,实际的代码是直接嵌入到你的页面,并且该操作被壅塞:<?php

// blocking file I/O

$file_data = file_get_contents(‘/path/to/file.dat’);

// blocking network I/O

$curl = curl_init('http://example.com/example-microservice');

$result = curl_exec($curl);

// somemore blocking network I/O

$result = $db->query('SELECT id, data FROM examples ORDER BY id DESC limit 100');

?>

关于若何与体系集成,就像如许:

I/O Model PHP

很简单:每个请求一个过程。 I/O 调用就壅塞。长处是简单可工作,缺点是,同时与 20,000 个客户端连接,你的办事器将会崩溃。这种办法不克不及很好地扩大,因为内核供给的用于处理安闲量 I/O (epoll 等) 的对象没有被应用。 落井下石的是,为每个请求运行一个零丁的过程往往会应用大年夜量的体系资本,特别是内存,这平日是你在如许的场景中碰到的第一个问题。

留意:Ruby 应用的办法与 PHP 异常类似,在大年夜致的方面上,它们可以被认为是雷同的。

多线程办法: Java

就在你购买你的第一个域名,在某个句子后很酷地随机说出 “dot com” 的那个时刻,Java 来了。而 Java 具有内置于该说话中的多线程功能,它异常棒(特别是在创建时)。

大年夜多半 Java Web 办事器经由过程为每个请求启动一个新的履行线程,然后在该线程中最终调用你(作为应用法度榜样开辟人员)编写的函数。

publicvoid doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

{

// blocking file I/O

InputStream fileIs = new FileInputStream("/path/to/file");

// blocking network I/O

URLConnection urlConnection = (new URL("http://example.com/example-microservice")).openConnection();

InputStream netIs = urlConnection.getInputStream();

// somemore blocking network I/O

out.println("...");

}

因为我们膳绫擎的 doGet 办法对应于一个请求,并且在其本身的线程中运行,而不是每个请求一个零丁的过程,申请本身的内存。如许有一些好处,比如在线程之间共享状况、缓存数据等,因为它们可以拜访彼此的内存,然则它与调及?交淮竽暌拱响与之前的 PHP 的例子几乎雷同。每个请求获得一个新线程,该线程内的各类 I/O 操作壅塞在线程内,直到请求被完全处理为止。线程被池化以最小化创建和烧毁它们的成本,然则数千个连接仍然意味着数千个线程,这对调剂法度榜样是晦气的。

推荐阅读

2017年架构师最重要的48个小时 | 8折倒计时

Open Web Application Security Project (OWASP)每隔3-4年会颁布一次 “Web 开辟安然问题 TOP10 ” ,经由过程找出企业组织所面对的>>>详细阅读

地址:http://www.17bianji.com/lsqh/38300.html

node java php_服务端I/O性能:Node、PHP、Java、Go的对比相关推荐

  1. java cxf服务端_webservice概述及cxf在Java开发中应用(二) 简单搭建cxf服务端

    首先我们下载cxf的jar包,我这里下载的是apache-cxf-3.0.4这个版本,目前最新的. Eclipse里面新建一个Java project,在工程中引入需要的jar: 这些包里面包含了je ...

  2. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用

    /*** SimpleHttpServer.java*/importjava.io.*;importjava.net.*;importjava.util.StringTokenizer;/*** 一个 ...

  3. Node和java和php,服务端I/O性能大比拼:Node、PHP、Java和Go(三)

    服务端I/O性能大比拼:Node.PHP.Java和Go(三) 服务端I/O性能大比拼:Node.PHP.Java和Go(三) 谎言,诅咒的谎言和基准 对这些各种模式的上下文切换进行准确的定时是很困难 ...

  4. node和java性能_服务端I/O性能大比拼:Node、PHP、Java和Go(二)

    服务端I/O性能大比拼:Node.PHP.Java和Go(二) 服务端I/O性能大比拼:Node.PHP.Java和Go(二) ### 多线程的方式:Java 所以就在你买了你的第一个域名的时候,Ja ...

  5. php8vsgo,服务端 I/O 性能:Node、PHP、Java、Go 的对比

    原标题:服务端 I/O 性能:Node.PHP.Java.Go 的对比 了解应用程序的输入/输出(I/O)模型意味着理解应用程序处理其数据的载入差异,并揭示其在真实环境中表现.或许你的应用程序很小,在 ...

  6. mysql第五章项目二_Todo List:Node+Express 搭建服务端毗邻Mysql – 第五章(第1节)

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 万丈高楼平地起,我们的Todo List项目也是越来越结实了.Todo List的前面4章内容都是在为Client端开发, ...

  7. java游戏服务端实现

     java游戏服务端实现 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详 ...

  8. java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端

    前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈. 本文测试环境: 系统:WINDOWS 7(第3.6步).OS X 10.9(第4步) 软 ...

  9. Java socket服务端

    本文主要讲解java socket服务端通信内容,服务端监听客户端,并且获取客户端的消息. 监听的主要代码是一个while死循环,因为需要实现持续监听.读者可重点阅读MySocketServer 类的 ...

最新文章

  1. sprintf,你知道多少?
  2. 动态规划解题思路与总结(三万字)
  3. 日志 php_高性能的PHP日志系统 SeasLog 使用
  4. JFree chart
  5. java线程画动图闪,Android中利用画图类和线程画出闪烁的心形,android心形,package com....
  6. php7 验证url格式,url的组成格式为
  7. vue v-model指令
  8. Java -考研 学习路线(笔记链接汇总)-个人用
  9. 下载官方Intel的Windows 10网卡驱动
  10. Gspace简介 | 华为手机如何简单使用谷歌服务
  11. 数据分析36计(27):分析师与用户研究员,玩转定量研究和定性研究,落地研究结论...
  12. Linux服务器跑机器学习代码报错记录
  13. Python面向对象版学员管理系统(附源码)
  14. eclipse报 The word is not correctly spelled问题
  15. SIM卡无法识别经验案例
  16. SPSS Modeler 建模前准备—数据平衡与特征选择(指南 第十一章)
  17. 80年代后最佳阵容之巴西篇
  18. 苹果对NFT敞开怀抱?最新App Store审核指南解读
  19. Spring Boot 入门笔记
  20. lsf基础命令bsublmstatbjobs

热门文章

  1. 为什么说重启能解决90%的问题
  2. Padas中DataFrame运算
  3. 复习计算机网络day1-计算机网络的初步了解
  4. 史上最强:numpy实现全部机器学习算法
  5. 神器!3小时复现 Alexnet 和 word2vec!
  6. OpenCV直线拟合检测
  7. 《数据安全管理办法(征求意见稿)》发布 为个人数据安全加把锁
  8. postgre 常用语法,如 group_concat用法
  9. 使用变量对象引出作用域链
  10. 从“我是谁”到人工智能的原点,机器学习的路在何方