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

节点可以防止无限循环吗?

IT培训 admin 8浏览 0评论

节点可以防止无限循环吗?

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

while(true){ doSomething()}

其中doSomething是同步函数(一段阻塞的代码)

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

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

节点可以为您采取任何措施来防止此类问题吗?

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

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

如果节点无法防止这种情况,这是设计错误还是无法防止此类问题?

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

防止此类问题的唯一方法是不编写执行此操作的错误代码。坦白地说,一旦您知道要避免的问题,就可以避免编写这种类型的代码。

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

正确。这是在使用nodejs进行编码时所学的知识。我从来没有发现很难避免。 nodejs是单线程事件驱动的系统,而不是多线程系统。这样,您将使用事件进行编程,而不是轮询或检查条件的长时间运行的循环。一旦了解并使用Node.js的工作原理,它就是一个相当简单的概念,可以学习和使用。它与某些其他环境不同。但是,如何在nodejs中使用异步操作只是您在该环境中编程所必须学习的内容。这是不可避免的,只是nodejs特性的一部分。无需学习Nodejs即可对其进行编程就无法拥有Node.js的架构类型。如果您想要一个不同的体系结构(出于个人原因),则选择一个不同的环境,而不是nodejs。

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

节点可以防止无限循环吗?

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

while(true){ doSomething()}

其中doSomething是同步函数(一段阻塞的代码)

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

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

节点可以为您采取任何措施来防止此类问题吗?

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

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

如果节点无法防止这种情况,这是设计错误还是无法防止此类问题?

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

防止此类问题的唯一方法是不编写执行此操作的错误代码。坦白地说,一旦您知道要避免的问题,就可以避免编写这种类型的代码。

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

正确。这是在使用nodejs进行编码时所学的知识。我从来没有发现很难避免。 nodejs是单线程事件驱动的系统,而不是多线程系统。这样,您将使用事件进行编程,而不是轮询或检查条件的长时间运行的循环。一旦了解并使用Node.js的工作原理,它就是一个相当简单的概念,可以学习和使用。它与某些其他环境不同。但是,如何在nodejs中使用异步操作只是您在该环境中编程所必须学习的内容。这是不可避免的,只是nodejs特性的一部分。无需学习Nodejs即可对其进行编程就无法拥有Node.js的架构类型。如果您想要一个不同的体系结构(出于个人原因),则选择一个不同的环境,而不是nodejs。

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

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论