当前位置: 永利棋牌 > 儿童文学 > 正文

澳门新永利国际网站js的线程和进程,你应该阅读

时间:2019-10-01 13:19来源:儿童文学
说明 这里,没有哗众取宠,没错。通过阅读几本书籍,能把你带入门,就已经很不错了。这个世上,从来没有哪本书能让你从入门到精通。因为精通只能通过在项目实战的不断积淀!

澳门新永利国际网站 1

说明

这里,没有哗众取宠,没错。通过阅读几本书籍,能把你带入门,就已经很不错了。 这个世上,从来没有哪本书能让你从入门到精通。因为精通只能通过在项目实战的不断积淀!

我以前是做前端开发的,在项目中,我负责前端网站的开发,同时,项目组配备了Java后台工程师。我们各做各的,相处得很好。突然一天,他提出离职。因为项目着急上线,来不及找到合适的人手。PM要接手他的后台Java代码,必须接,这是命令,没得商量。 硬着头皮,好在我大学学过Java,有Java基础,硬着头皮,这里面的坑啊,太大了,没法填,还是把自己埋了吧!

前端工程师转后台Java开发,这好比一个使惯了刀的,现在让他耍棍,这怎么行呢?

后来,我转向了Node.js 的学习,因为Node.js 可以用JavaScript编写程序,而JavaScript对做了3年的前端的我来说,驾驭自如!

在我开始真正决定全面转向Node.js时,来自一本书籍的出版:《Node.js高级编程》。一本真正拨云见日,深入浅出,用最通俗的文字解释了Node.js的使用过程。于是,在这个背景下,我很顺利并且快速的转入Node.js,并以此为作为我的编程工作。

要想完全的理解一个领域的内容,纸质书本是绝对必要的。电子书本虽然有其便易性,但是在阅读上并不方便。在研究的过程中,你会需要不时地翻阅书中的某些特定内容,而电子书并不适合。纸质的书本可以让你迅速定位到需要的内容,并且把思维限制在一个小的范围,进而获得深入的探索、领悟。

I 你需要阅读的Node.js基础书籍

进入Node.js,一定要搭配轻松易懂的书籍,这样才能花费最少的时间,获得最高的收益。以下是我对一些Node.js书籍的读后印象。

  1. 《Node.js高级编程》

澳门新永利国际网站 2

image.png

《Node.js高级编程》
Node.js是一种主流框架,它允许你使用JavaScript快速构建具有高度可伸缩性的网络程序。可是,它有自己的学习曲线,这本较为深入的指南性图书首先介绍了Node.js平台的安装,然后重点关注:创建和加载模块;使用缓冲区对二进制数据进行处理、编码和编码;用事件发射器模式简化事件绑定等。本书还涵盖了从使用定时器制定函数执行计划到创建和控制外部进程等内容,可以让你为运行、构建和测试自定义模块做好准备。

Pedro Teixeria是一位高产的开源项目程序员,同时也是众多Node.js模块的构建者。他是Node公司的创始人之一,同时也是Nodejitsu公司的高级程序员,Nodejitsu公司是以Node.js平台作为服务的领头羊。自从在14年前获得软件工程学位后,他从事过的职业包括咨询师和程序员,并且他还是世界知名的Node.js社区活跃成员。此外,他还是广受欢迎的Node Tuts视频的制作者。

没有更多的言语来形容这本书的价值,这本书绝对是你进入Node.js领域必读的第一本书!

从异步模型开始,作者逐步讲解了事件、流、二进制数据处理、文件系统、TCP HTTP常识、TCP客户端服务器、HTTP客户端服务器、TLS以及HTTPS安全通信、进程子进程、mongodb、mysql、redis数据库的连接操作,甚至还介绍了一些流行的中间件和express。

通俗易通,内容广泛。被称作Node.js领域的《JavaScript高级编程》(JavaScript圣经)。这本书堪称Node.js圣经, 我直到现在还是经常翻看其中的某些内容。

  1. 《了不起的Node.js:将JavaScript进行到底》

澳门新永利国际网站 3

image.png

《了不起的Node.js:将JavaScript进行到底》是一本经典的 Learning by Doing的书籍。它由 Node社区著名的 Socket.IO作者—— Guillermo Rauch,通过大量的实践案例撰写,并由 Node社区非常活跃的开发者—— Goddy Zhao翻译而成。 《了不起的Node.js:将JavaScript进行到底》内容主要由对五大部分的介绍组成: Node核心设计理念、 Node核心模块 API、Web开发、数据库以及测试。从前到后、由表及里地对使用 Node进行 Web开发的每一个环节都进行了深入的讲解,并且最大的特点就是通过大量的实际案例、代码展示来剖析技术点,讲解最佳实践。

它也是把Node.js讲的非常清晰的一本书,比《Node.js高级编程》稍逊一筹,但是也是非常难得。里边的内容《Node.js高级编程》基本上都讲到了,不过大家站的角度略有不同,可以搭配翻看。另外此书还讲解了TDD和BDD测试开发,并且讲解了Mocha测试框架,对于想了解测试是不错的选择。

前言

  很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况。同时本章还将列举一些让Node.js的web服务器线程阻塞的例子,最后会提供Node.js碰到这类cpu密集型问题的解决方案。

澳门新永利国际网站 4

  在学习本章之前,读者需要对Node.js有一个初步的认识,熟悉Node.js基本语法、cluster模块、child_process模块和express框架;接触过apache的http压力测试工具ab;了解一般web服务器对于静态文件的处理流程。

1 请和大家介绍下您及所从事的工作。

3. 《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》

澳门新永利国际网站 5

image.png

推荐这本书,是因为在一个偶然的机会,我看到了Coding Dojo在2017年末发布的2018年最具就业前景的几大技术方向。它的分析数据来自就业网站 Indeed.com给出的25种编程语言、栈和框架。除去Java、Python、JavaScript、C++等七种老牌编程语言位居榜首外,Coding Dojo还将Node和MEAN列为开发人员最应该熟悉的技术。其中,Node.js在该分析数据中排行第十二位,MEAN全栈开发技术位列第十八。(数据来源并翻译自网站www.codingdojo.com)

这里第一次提到了MEAN技术栈,开发者学习MEAN技术栈的必要性可见一斑,然而目前市面上讲授MEAN全栈技术的图书凤毛麟角,几乎全是国外著作或其译本。

还有前面提到的两本书都是讲Node.js 技术本身的,可以说,单纯的应用服务器开发,还无法完成一个独立的WEB应用程序。值得庆幸的是,《全栈开发之道》这本书则填补了这一空白:它紧跟技术前沿,实用性很强,而且简明易懂,结合实例。

这本书最后一部分给出了四个应用实例,详细讲述了每个工程的实现思路与实现步骤,并且有重点或难点部分代码解读。该书思路清晰有条理,逻辑结构严密,可读性强,很容易让读者顺着作者的引导去思考、学习。作为本书的读者之一,在实际练习了书中实例后,我也能举一反三地自己做出一个小型管理系统了!

本书的另一优势在于,相比网上的博客等资料,它更加系统化、结构化,帮我们省去了作为初学者筛选有效信息的时间和精力,同时为读者深入学习奠定了基础。

该书作者,既是互联网企业的资深系统架构师,又是大学客座教授,书中讲到的实例,娓娓道来,很容易入门。

《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》这本书是MEAN全栈技术入门学习的不二之选!


 Node.js和PHP

  早期有很多关于Node.js争论的焦点都在它的单线程模型方面,在由Jani Hartikainen写的一篇著名的文章《PHP优于Node.js的五大理由》中,更有一条矛头直接指向Node.js单线程脆弱的问题。

如果PHP代码损坏,不会拖垮整个服务器。 PHP代码只运行在自己的进程范围中,当某个请求显示错误时,它只对特定的请求产生影响。而在Node.js环境中,所有的请求均在单一的进程服务中,当某个请求导致未知错误时,整个服务器都会受到影响。

  Node.js和Apache+PHP还有一个非常不同的地方就是进程的运行时间长短,当然这一点也被此文作为一个PHP优于Node.js的理由来写了。

PHP进程短暂。在PHP中,每个进程对请求持续的时间很短暂,这就意味着你不必为资源配置和内存而担忧。而Node.js的进程需要运行很长一段时间,你需要小心并妥善管理好内存。比如,如果你忘记从全局数据中删除条目,这会轻易的导致内存泄露。

  在这里我们并不想引起一次关于PHP和Node.js孰优孰劣的口水仗,PHP和Node.js各代表着一个互联网时代的开发语言,就如同我们讨论跑车和越野车谁更好一样,它们都有自己所擅长和适用的场景。我们可以通过下面这两张图深入理解一下PHP和Node.js对处理Http请求时的区别。

  PHP的模型:

澳门新永利国际网站 6

  Node.js的模型:

澳门新永利国际网站 7

  所以你在编写Node.js代码时,要保持清醒的头脑,任何一个隐藏着的异常被触发后,都会将整个Node.js进程击溃。但是这样的特性也为我们编写代码带来便利,比如同样要实现一个简单的网站访问次数统计,Node.js只需要在内存里定义一个变量var count=0;,每次有用户请求过来执行count++;即可。

var http = require('http');
var count = 0;
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end((++count).toString())
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');

 

  但是对于PHP来说就需要使用第三方媒介来存储这个count值了,比如创建一个count.txt文件来保存网站的访问次数。

<?php
    $counter_file = ("count.txt");
    $visits = file($counter_file);
    $visits[0]++;
    $fp = fopen($counter_file,"w");
    fputs($fp,"$visits[0]");
    fclose($fp);
    echo "$visits[0]";
?>

 

我目前在苏州唐人数码工作,是一家本地的网络游戏公司,主要经营棋牌游戏,最近自主研发了一款3D的网路游戏——争渡三国,我在公司负责游戏平台工作,对公司自营的游戏以及联运游戏提供Web支持,比如用户登录,游戏充值,平台接口服务等。

小结

以上推荐的三本书,既涵盖了node.js 基础,也涵盖了从前端到后台的开发框架。跟着书上的实例,尤其是MEAN 全栈的实例走一遍,不到一个月,轻松入门!

 单线程的js

  Google的V8 Javascript引擎已经在Chrome浏览器里证明了它的性能,所以Node.js的作者Ryan Dahl选择了v8作为Node.js的执行引擎,v8赋予Node.js高效性能的同时也注定了Node.js和大名鼎鼎的Nginx一样,都是以单线程为基础的,当然这也正是作者Ryan Dahl设计Node.js的初衷。

 

 单线程的优缺点

  Node.js的单线程具有它的优势,但也并非十全十美,在保持单线程模型的同时,它是如何保证非阻塞的呢?

2 为什么会想到写这样一本书?

  高性能

  首先,单线程避免了传统PHP那样频繁创建、切换线程的开销,使执行速度更加迅速。第二,资源占用小,如果有对Node.js的web服务器做过压力测试的朋友可能发现,Node.js在大负荷下对内存占用仍然很低,同样的负载PHP因为一个请求一个线程的模型,将会占用大量的物理内存,很可能会导致服务器因物理内存耗尽而频繁交换,失去响应。

自从Node.js问世以来,它的发展速度相当迅猛,最早只有英文资料可以学习,现在中文的书籍也慢慢多了起来,但是这些学习教材绝大部分都是从基础的安装,hello world开始,然后进行对Node.js各种核心库的介绍,最后分享一两个小实例这一种模式。我们发现很多读者已经对Node.js的基础和核心库很熟悉了,迫切需要实际的项目案例来进一步学习,所以我们几个作者就商量联合起来写了这么一本不讲基础,只有实战的《Node.js实战》书籍,希望能填补Node.js中文资料的这一空缺,同时也满足一些Node.js爱好者用实际项目来学习的需求。

  线程安全

  单线程的js还保证了绝对的线程安全,不用担心同一变量同时被多个线程进行读写而造成的程序崩溃。比如我们之前做的web访问统计,因为单线程的绝对线程安全,所以不可能存在同时对count变量进行读写的情况,我们的统计代码就算是成百的并发用户请求都不会出现问题,相较PHP的那种存文件记录访问,就会面临并发同时写文件的问题。线程安全的同时也解放了开发人员,免去了多线程编程中忘记对变量加锁或者解锁造成的悲剧。

 

  单线程的异步和非阻塞

  Node.js是单线程的,但是它如何做到I/O的异步和非阻塞的呢?其实Node.js在底层访问I/O还是多线程的,有兴趣的朋友可以翻看Node.js的fs模块的源码,里面会用到libuv来处理I/O,所以在我们看来Node.js的代码就是非阻塞和异步形式的。

  阻塞/非阻塞与异步/同步是两个不同的概念,同步不代表阻塞,但是阻塞肯定就是同步了。

  举个现实生活中的例子,我去食堂打饭,我选择了A套餐,然后工作人员帮我去配餐,如果我就站在旁边,等待工作人员给我配餐,这种情况就称之为同步;若工作人员帮我配餐的同时,排在我后面的人就开始点餐,这样整个食堂的点餐服务并没有因为我在等待A套餐而停止,这种情况就称之为非阻塞。这个例子就简单说明了同步但非阻塞的情况。

  再如果我在等待配餐的时候去买饮料,等听到叫号再回去拿套餐,此时我的饮料也已经买好,这样我在等待配餐的同时还执行了买饮料的任务,叫号就等于执行了回调,就是异步非阻塞了。

3  很多读者反映这本书技术写得比较扎实,这在一定程度反映了您的技术功底,不知道您是如何一路到今天的?其中有什么印象特别深刻的事情分享一下吗?

  阻塞的单线程

  既然Node.js是单线程异步非阻塞的,是不是我们就可以高枕无忧了呢?

  还是拿上面那个买套餐的例子,如果我在买饮料的时候,已经叫我的号让我去拿套餐,可是我等了好久才拿到饮料,所以我可能在大厅叫我的餐号之后很久才拿到A套餐,这也就是单线程的阻塞情况。

  在浏览器中,js都是以单线程的方式运行的,所以我们不用担心js同时执行带来的冲突问题,这对于我们编码带来很多的便利。

  但是对于在服务端执行的Node.js,它可能每秒有上百个请求需要处理,对于在浏览器端工作良好的单线程js是否也能同样在服务端表现良好呢?

  我们看如下代码:

var start = Date.now();//获取当前时间戳
setTimeout(function () {
    console.log(Date.now() - start);
    for (var i = 0; i < 1000000000; i++){//执行长循环
    }
}, 1000);
setTimeout(function () {
    console.log(Date.now() - start);
}, 2000);

 

  最终我们的打印结果是:(结果可能因为你的机器而不同)

1000
3738

  对于我们期望2秒后执行的setTimeout函数其实经过了3738毫秒之后才执行,换而言之,因为执行了一个很长的for循环,所以我们整个Node.js主线程被阻塞了,如果在我们处理100个用户请求中,其中第一个有需要这样大量的计算,那么其余99个就都会被延迟执行。

  其实虽然Node.js可以处理数以千记的并发,但是一个Node.js进程在某一时刻其实只是在处理一个请求。

技术功底说来也惭愧,我并不是什么大师,只不过将自己在这些年所遇到的,和自己知道的全盘奉献给读者,Node.js之所以发展这么快,很大程度上也归功于它是开源的,它的一切都是开源的,分享自己的成果,如果能得到别人的肯定那是非常欣慰的一件事情。

  单线程和多核

  线程是cpu调度的一个基本单位,一个cpu同时只能执行一个线程的任务,同样一个线程任务也只能在一个cpu上执行,所以如果你运行Node.js的机器是像i5,i7这样多核cpu,那么将无法充分利用多核cpu的性能来为Node.js服务。

每个人都是从菜鸟一路走到老鸟的,记得刚毕业那会,被一家游戏公司招去做Web开发,参与了几个失败的项目后,就被主管直接训斥,说我绝对不适合写PHP,太没天赋了。也是那时开始,心里暗暗下定决心,既然选择了互联网这个行业就一定不能被淘汰,然后毅然放弃了玩了5年的魔兽世界,开始恶补各种互联网技术知识,学会了利用Google来自己学习的能力。

 多线程

  在C++、C#、python等其他语言都有与之对应的多线程编程,有些时候这很有趣,带给我们灵活的编程方式;但是也可能带给我们一堆麻烦,需要学习更多的Api知识,在编写更多代码的同时也存在着更多的风险,线程的切换和锁也会造成系统资源的开销。

  就像上面的那个例子,如果我们的Node.js有创建子线程的能力,那问题就迎刃而解了:

var start = Date.now();
createThread(function () { //创建一个子线程执行这10亿次循环
    console.log(Date.now() - start);
    for (var i = 0; i < 1000000000; i++){}
});
setTimeout(function () { //因为10亿次循环是在子线程中执行的,所以主线程不受影响
    console.log(Date.now() - start);
}, 2000);

 

  可惜也可以说可喜的是,Node.js的核心模块并没有提供这样的api给我们,我们真的不想多线程又回归回来。不过或许多线程真的能够解决我们某方面的问题。

编辑:儿童文学 本文来源:澳门新永利国际网站js的线程和进程,你应该阅读

关键词: