当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – node.js误解?

来源:互联网 收集:自由互联 发布时间:2021-06-22
从node.js页面 Almost no function in Node directly performs I/O, so the process never blocks. Because nothing blocks, less-than-expert programmers are able to develop fast systems. 所以,如果一个不太专业的程序员做了类似的事
从node.js页面

Almost no function in Node directly performs I/O, so the process never
blocks. Because nothing blocks, less-than-expert programmers are able
to develop fast systems.

所以,如果一个不太专业的程序员做了类似的事情,就像在回调中启动无限循环一样,它不会杀死系统(最终)?

或者,更现实地说,有人做了一些低效率的事情,并且需要很长时间来处理请求(比如说半秒钟或其他什么).感觉就像声称’没有阻止’ – > “快速系统”存在根本缺陷.

有人可以解释在这种情况下系统不会遇到性能问题吗?好像它会……

基本上,你的CPU速度很快.这很疯狂.

你的记忆也很快.

你的硬盘并不快疯狂.

互联网非常慢(REST,RPC等).

node.js旨在通过制作慢事件来确保您始终保持CPU忙碌.也就是说,而不是

var html = download_file_from_slow_internet(url);
 /* do what-ever-what-ever to that poor HTML */

你会做点什么的

download_file_from_slow_internet_with_an_awesome_callback(url, function(html) {
 /* do what-ever-what-ever to that poor HTML */
});

根据你想做的事情,最有可能的CPU有可能受到限制.制作函数download_file_from_slow_internet_with_an_awesome_callback的人有责任确保它在某个时候调用你的回调.

在您的示例中,无限循环是纯CPU.使用node.js,它将使整个服务器失效,这是非常糟糕的.所以,不要写无限循环.

请记住,“不到专家程序员”是相对的.专家程序员知道并理解线程,锁定,条件,互斥,竞争条件.如果您不使用多个线程,那么您可以避免所有问题.好吧,为什么首先引入线程?

它们是以这种方式引入的,因为CPU变得非常快,人们注意到等待IO没有意义.也就是说,您可以加载数据并同时处理它.当然,这引入了许多问题.大多数套接字库引入了非阻塞IO来解决这个问题,但这引入了一种考虑编程的基本不同方式.

你不得不使用状态机,状态机是非专业人员手中的令人不快和非常错误的.如果您曾在C中使用过低级套接字状态机,那么您就知道我在说什么了.

这就是node.js进入白马的地方.对于node.js,状态机是通过使用闭包来隐式回调的.它也被称为延续传递.

现在的想法是,我说这样做,然后通过一个函数,说“当你完成后,称之为”.由于JavaScript支持闭包,因此使用该语言隐式地传递状态和构建状态机是可行的.

现在,node.js是构建自定义服务器和构建健壮的Web应用程序的绝佳平台.这是在PHP或Ruby和C之间构建服务的好地方.

我建议将它用于服务器原型设计,如果你担心JavaScript的性能税,那么你可以帮我解决node.ocaml这个远未完成的问题,但它会让node.js看起来很慢.

网友评论