2011-12-20 57 views
12

我正在重写我的服务器并决定使用Node.js和Python。Node.js与Python

我更喜欢Javascript(因为我非常精通它),但this article让我停下来。我很好奇,如果任何人有任何问题,但我也很好奇,如果有任何平台相关的美德之一。

具体来说,需要其中一方不支持/限制/ Excel中,在

  • MySQL调用
  • imageMajik互动
  • 调用该系统的文件系统操作
  • 调用网络通过WGET/Curl其他任何东西
  • 你可以想到,正常的CGI进程必须处理。

我不想开始关于PHP或.Net的美德的说法,我已经做出了明确的决定转移到Python或Node.js的,并完全稳定的Node.js的,直到我阅读上面的文章,所以,我真的只是在寻找人们使用这两种工具时遇到的具体问题/美德。

在此先感谢。

+2

我从文章中得到的主要观点(如果你选择了无意义的散乱和侮辱)是由新手程序员编写的低于标准的代码很容易在Node中阻塞,即使它使用非阻塞IO。这是许多许多人和公司成功使用的强大工具,但您必须知道自己在做什么。 – 2011-12-20 21:47:00

+4

本文只显示一件事情:您可以在node.js中编写错误的代码。国际海事组织的node.js的一般想法是优秀的,但作为一切,它可以被滥用。 – CodesInChaos 2011-12-20 21:50:23

+3

没错,当然在任何语言中都是如此...... – 2011-12-20 21:52:11

回答

19

这里有两个问题:

  1. 语言的选择。如果您更喜欢Python或JavaScript,您需要自己决定,哪一个提供您想要的库。我无法帮助你做出这部分决定。
  2. IO模型的选择。

与文章中的建议不同,原则上单线程非阻塞IO模型并不坏。就我个人而言,我非常喜欢这种模式,因为它消除了多线程的复杂性,同时仍在使用共享内存模型。

此模型的另一个优点是,因为您不需要每个请求的线程,所以可以有许多并发的打开请求。

一个缺点是,如果没有语言支持,您需要明确排队延续,而不是以简单的命令方式编写代码。 C#5用它的异步等待功能来攻击这个问题,如果node.js在将来提供类似的东西,我不会感到惊讶。

本文主要讲述第二个缺点:如果阻塞主线程,则会阻塞整个服务器。

他的一个例子是简单的滥用:他实现了一个忙等待,而不是订阅一个事件。有了正确的编程,这根本不应该发生。

另一个例子有更多的观点:如果你有CPU密集型计算,你最好不要在主线程上做它们。对此的简单解决方案是一个工作线程的旋转,它可以在不触及主线程使用的内存的情况下进行计算。一旦完成,它会在主线程中调用回调函数。不知道node.js是否提供了这个。但是由于许多服务器应用程序不受CPU限制,所以这通常不是问题。

一般来说,这篇文章的质量非常低,并且讲述了关于作者的更多信息,而不是关于node.js.你不应该让它影响你的决定。

+5

我认为本文的主要观点是node.js的主要卖点是它的异步事件驱动系统,它不会自动让一个不太专业的程序员能够按照自己的意愿编写一个快速系统。一个无知的程序员在主线程中阻塞调用是相当可想象的,这会阻止整个服务器导致每个人的速度变慢,而不仅仅是当前的请求处理程序。 – 2011-12-20 22:47:56

+0

是的,Node.js **提供**的线程回调,就像JavaScript中的其他异步函数一样。 – trusktr 2014-03-21 00:35:30

+1

不要忘记,即使在Python中,通常也有多个进程正在运行,以帮助处理主线程繁忙问题(请参阅https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/uwsgi/) – Wernight 2014-08-11 09:37:38