node java php_服务端I/O性能:Node、PHP、Java、Go的对比
这些你明白了么?如今来到了真正有趣的部分:我们来看看一些风行的说话对那些对象的应用,并得出关于易用性和机能之间衡量的结论,以及一些其他有趣小器械。
声明,本文中显示的示例是零碎的(单方面的,只能表现相干的信息); 数据库拜访、外部缓存体系( 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的对比相关推荐
- java cxf服务端_webservice概述及cxf在Java开发中应用(二) 简单搭建cxf服务端
首先我们下载cxf的jar包,我这里下载的是apache-cxf-3.0.4这个版本,目前最新的. Eclipse里面新建一个Java project,在工程中引入需要的jar: 这些包里面包含了je ...
- java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
/*** SimpleHttpServer.java*/importjava.io.*;importjava.net.*;importjava.util.StringTokenizer;/*** 一个 ...
- Node和java和php,服务端I/O性能大比拼:Node、PHP、Java和Go(三)
服务端I/O性能大比拼:Node.PHP.Java和Go(三) 服务端I/O性能大比拼:Node.PHP.Java和Go(三) 谎言,诅咒的谎言和基准 对这些各种模式的上下文切换进行准确的定时是很困难 ...
- node和java性能_服务端I/O性能大比拼:Node、PHP、Java和Go(二)
服务端I/O性能大比拼:Node.PHP.Java和Go(二) 服务端I/O性能大比拼:Node.PHP.Java和Go(二) ### 多线程的方式:Java 所以就在你买了你的第一个域名的时候,Ja ...
- php8vsgo,服务端 I/O 性能:Node、PHP、Java、Go 的对比
原标题:服务端 I/O 性能:Node.PHP.Java.Go 的对比 了解应用程序的输入/输出(I/O)模型意味着理解应用程序处理其数据的载入差异,并揭示其在真实环境中表现.或许你的应用程序很小,在 ...
- mysql第五章项目二_Todo List:Node+Express 搭建服务端毗邻Mysql – 第五章(第1节)
点击右上方红色按钮关注"web秀",让你真正秀起来 前言 万丈高楼平地起,我们的Todo List项目也是越来越结实了.Todo List的前面4章内容都是在为Client端开发, ...
- java游戏服务端实现
java游戏服务端实现 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详 ...
- java sslsocket程序_JAVA与C++进行sslsocket通信,JAVA做服务端或客户端
前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖到现在才写这篇文章,不好意思哈. 本文测试环境: 系统:WINDOWS 7(第3.6步).OS X 10.9(第4步) 软 ...
- Java socket服务端
本文主要讲解java socket服务端通信内容,服务端监听客户端,并且获取客户端的消息. 监听的主要代码是一个while死循环,因为需要实现持续监听.读者可重点阅读MySocketServer 类的 ...
最新文章
- sprintf,你知道多少?
- 动态规划解题思路与总结(三万字)
- 日志 php_高性能的PHP日志系统 SeasLog 使用
- JFree chart
- java线程画动图闪,Android中利用画图类和线程画出闪烁的心形,android心形,package com....
- php7 验证url格式,url的组成格式为
- vue v-model指令
- Java -考研 学习路线(笔记链接汇总)-个人用
- 下载官方Intel的Windows 10网卡驱动
- Gspace简介 | 华为手机如何简单使用谷歌服务
- 数据分析36计(27):分析师与用户研究员,玩转定量研究和定性研究,落地研究结论...
- Linux服务器跑机器学习代码报错记录
- Python面向对象版学员管理系统(附源码)
- eclipse报 The word is not correctly spelled问题
- SIM卡无法识别经验案例
- SPSS Modeler 建模前准备—数据平衡与特征选择(指南 第十一章)
- 80年代后最佳阵容之巴西篇
- 苹果对NFT敞开怀抱?最新App Store审核指南解读
- Spring Boot 入门笔记
- lsf基础命令bsublmstatbjobs