最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

节点如何防止无限循环?

IT培训 admin 12浏览 0评论

节点如何防止无限循环?

由于node运行带有事件循环的单线程模型,我想知道如果编写如下代码,节点如何防止整个应用程序失败:

while(true){ doSomething()}

doSomething是一个同步函数(阻塞代码段)

请注意,编写像doSomething这样的函数没有任何意义,但没有什么能阻止您犯错误

如果节点无法阻止这种情况,这是一个设计错误还是没有办法防止这类问题?

这里的问题是,由于它是单线程的,它不允许运行应用程序的任何其他部分(例如,Web服务器将停止接受新连接),因为此功能永远不会结束。在多线程环境中,您将单独松开此线程

回答如下:

我想知道如果你编写一个无限循环,节点如何防止整个应用程序失败

nodejs不会阻止这种无限循环。它将永远运行该循环或直到某些资源耗尽(如果循环正在消耗某些资源,如内存)。

如果节点无法阻止这种情况,这是一个设计错误还是没有办法防止这类问题?

我不认为大多数人认为这是一个设计错误 - 虽然这纯粹是一种意见,不同的人可能有不同的意见。这是nodejs设计方式的结果,它具有许多其他好处。

防止此类问题的唯一方法是不编写执行此操作的错误代码。老实说,一旦你意识到这是一个需要避免的问题,避免编写这种类型的代码并不难。

这里的问题是,由于它是单线程的,它不允许运行应用程序的任何其他部分(例如,Web服务器将停止接受新连接),因为此功能永远不会结束。在多线程环境中,您将单独松开此线程

正确。这是您在nodejs中编码时学到的东西。我从未发现要避免这件事很难。 nodejs是一个单线程事件驱动系统,而不是一个多线程系统。因此,您使用事件编程,而不是长时间轮询或检查条件的循环。一旦了解了nodejs的工作原理,学习和使用它是一个相当简单的概念。它与其他一些环境不同。但是,如何在nodejs中使用异步操作只是您必须学习在该环境中编程的东西。这是不可避免的,只是nodejs的一部分。 nodejs无法拥有它所拥有的架构类型,而无需学习它来编程。如果你想要一个不同的架构(出于个人原因),那么选择一个不同的环境,而不是nodejs。

单线程大大简化了许多其他事情(远远少于竞争条件的机会),并在某些情况下(使用异步I / O)与线程环境相比提高了可伸缩性。对于需要将多个CPU应用于您的问题的情况,node.js中通常可以直接使用内置群集模块或启动工作进程并为其提供工作。数据通常通过某种数据库(基于文件或基于RAM)在多个进程之间共享,这些数据库为您处理大部分多进程同步。

节点如何防止无限循环?

由于node运行带有事件循环的单线程模型,我想知道如果编写如下代码,节点如何防止整个应用程序失败:

while(true){ doSomething()}

doSomething是一个同步函数(阻塞代码段)

请注意,编写像doSomething这样的函数没有任何意义,但没有什么能阻止您犯错误

如果节点无法阻止这种情况,这是一个设计错误还是没有办法防止这类问题?

这里的问题是,由于它是单线程的,它不允许运行应用程序的任何其他部分(例如,Web服务器将停止接受新连接),因为此功能永远不会结束。在多线程环境中,您将单独松开此线程

回答如下:

我想知道如果你编写一个无限循环,节点如何防止整个应用程序失败

nodejs不会阻止这种无限循环。它将永远运行该循环或直到某些资源耗尽(如果循环正在消耗某些资源,如内存)。

如果节点无法阻止这种情况,这是一个设计错误还是没有办法防止这类问题?

我不认为大多数人认为这是一个设计错误 - 虽然这纯粹是一种意见,不同的人可能有不同的意见。这是nodejs设计方式的结果,它具有许多其他好处。

防止此类问题的唯一方法是不编写执行此操作的错误代码。老实说,一旦你意识到这是一个需要避免的问题,避免编写这种类型的代码并不难。

这里的问题是,由于它是单线程的,它不允许运行应用程序的任何其他部分(例如,Web服务器将停止接受新连接),因为此功能永远不会结束。在多线程环境中,您将单独松开此线程

正确。这是您在nodejs中编码时学到的东西。我从未发现要避免这件事很难。 nodejs是一个单线程事件驱动系统,而不是一个多线程系统。因此,您使用事件编程,而不是长时间轮询或检查条件的循环。一旦了解了nodejs的工作原理,学习和使用它是一个相当简单的概念。它与其他一些环境不同。但是,如何在nodejs中使用异步操作只是您必须学习在该环境中编程的东西。这是不可避免的,只是nodejs的一部分。 nodejs无法拥有它所拥有的架构类型,而无需学习它来编程。如果你想要一个不同的架构(出于个人原因),那么选择一个不同的环境,而不是nodejs。

单线程大大简化了许多其他事情(远远少于竞争条件的机会),并在某些情况下(使用异步I / O)与线程环境相比提高了可伸缩性。对于需要将多个CPU应用于您的问题的情况,node.js中通常可以直接使用内置群集模块或启动工作进程并为其提供工作。数据通常通过某种数据库(基于文件或基于RAM)在多个进程之间共享,这些数据库为您处理大部分多进程同步。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论