重要的里程碑涌如今 Java 1.4 版本(以及 1.7 的重要进级)中,它获得了履行非浊宣 I/O 调用的才能。大年夜多半应用法度榜样、web 应用和其它用处不会应用它,但至少它是可用的。一些 Java Web 办事器测验测验以各类方法应用这一点;然而,绝大年夜多半安排的 Java 应用法度榜样仍然如上所述工作。
I/O Model Java
肯定有一些很好的开箱即竽暌姑的 I/O 功能,Java 让我们更接近,但它仍然没有真正解决当你有一个大年夜量的 I/O 绑定的应用法度榜样被数千个壅塞线程所压垮的问题。
无壅塞 I/O 作为一等公平易近: Node
当更好的 I/O 模式来到 Node.js,壅塞才真正被解决。任何一个曾听过 Node 简单介绍的人都被告诉这是“非浊宣”,可以有效地处理 I/O。这在一般意义上是精确的。但在细节中则不尽然,并且当在进行机能工程时,这种巫术碰到了问题。
Node 实现典范例根本上不是说 “在这里写代率攀来处理请求”,而是说 “在这里写代率攀来开端处理请求”。每次你须要做一些涉及到 I/O 的操作,你会创建一个请求并给出一个回调函数,Node 将在完成之后调用该函数。
在请求中履行 I/O 操作的典范 Node 代码如下所示:
- http.createServer(function(request, response) {
- fs.readFile('/path/to/file', 'utf8', function(err, data) {
- response.end(data);
- });
- });
如许做的基来源基本理是让 Node 有机话苄效地处理这些回调之间的 I/O 。一个加倍密切相干的场景是在 Node 中进行数据库调用,然则我不会在这个例子中烦琐,因为它遵守完全雷同的原则:启动数据库调用,并给 Node 一个回调函数,它应用非浊宣调用零丁履行 I/O 操作,然后在你请求的数据可用时调用回调函数。列队 I/O 调用和让 Node 处理它然后获取回调的机制称为“事宜轮回”。它工作的很好。

I/O Model Node.js
然而,这个模型有一个陷阱,究其原因,很多是与 V8 JavaScript 引擎(Node 用的是 Chrome 浏览器的 JS 引擎)若何实现的有存眷1 。你编写的所有 JS 代码都运行在单个线程中。你可以想想,这意味着当应用高效的非浊宣技巧履行 I/O 时,你的 JS 可以在单个线程中运行计算密集型的操作,每个代码块都邑壅塞下一?。可能出现这种情况的一个常见例子是以某种方法遍历数据库记录,然后再将其输出到客户端。这是一个示例,展示了其是若何工作:
- var handler = function(request, response) {
- connection.query('SELECT ...', function (err, rows) {
- if (err) { throw err };
- for (var i = 0; i < rows.length; i++) {
- // do processing on each row
- }
- response.end(...); // write out the results
- })
- };
另一点是,固然这只是一个不雅点,然则写一堆嵌套的回调可能是相当令人憎恶的,有些则认为它使代码更难以追踪。在 Node 代码中看到回调嵌套 4 层、5 层甚至更独裁并不罕有。
我们再次来衡量一下。如不雅你的重要机能问题是 I/O,则 Node 模型工作正常。然而,它的关键是,你可以在一个处理 HTTP 请求的函数琅绫擎放置 CPU 密集型的代码,并且不当心的话会导致每个连接都很慢。
最天然的非浊宣:Go
在我进入 Go 部分之前,我应当披露我是一个 Go 的粉丝。我已经在很多项目中应用过它,我是一个其临盆力优势的公开支撑者,我在我的工作中应用它。
那么,让我们来看看它是若何处理 I/O 的。Go 说话的一个关键特点是它包含本身的调剂法度榜样。在 Go 中,不是每个履行线程对应于一个单一的 OS 线程,其经由过程一种叫做 “协程goroutine” 的概念来工作。而 Go 的运行时可以将一个协程分派给一个 OS 线程,使其履行或暂停它,并且它不与一个 OS 线程相接洽关系——这要基于那个协程正在做什么。来自 Go 的 HTTP 办事器的每个请求都在零丁的协程中处理。
推荐阅读
2017年架构师最重要的48个小时 | 8折倒计时 Open Web Application Security Project (OWASP)每隔3-4年会颁布一次 “Web 开辟安然问题 TOP10 ” ,经由过程找出企业组织所面对的>>>详细阅读
本文标题:服务端I/O性能:Node、PHP、Java、Go的对比
地址:http://www.17bianji.com/lsqh/38300.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示