Node.js与Python
我正在重写我的服务器,现在在Node.js和Python之间做选择。
我更喜欢JavaScript(因为我对它非常熟悉),但是这篇文章让我有点犹豫。我想知道有没有人遇到过什么问题,同时也想了解这两个平台之间有没有什么优缺点。
具体来说,这两个工具在以下方面有没有不支持、限制或者特别擅长的地方:
- mySQL数据库的调用
- 与ImageMagick的交互
- 对系统进行文件操作的调用
- 通过WGET/Curl等方式进行网络请求
- 还有其他正常的CGI处理需要应对的事情。
我不想讨论PHP或.Net的优缺点,我已经决定要在Python和Node.js之间选择,之前我完全倾向于Node.js,直到我读了那篇文章。所以,我其实只是想了解一下大家在使用这两个工具时遇到的具体问题或优点。
提前谢谢大家。
1 个回答
这里有两个问题:
- 语言的选择。你需要自己决定是喜欢Python还是JavaScript,以及哪个语言提供你想要的库。我在这方面帮不了你。
- 输入输出模型的选择。
和文章所说的不同,单线程非阻塞的输入输出模型原则上并不是坏事。我个人非常喜欢这个模型,因为它简化了多线程的复杂性,同时仍然可以在共享内存的模型下工作。
这个模型的另一个优点是,因为你不需要为每个请求开一个线程,所以可以同时处理很多个请求。
一个缺点是,如果没有语言的支持,你需要手动排队继续执行的任务,而不是简单地写代码。C#5通过它的async-await特性解决了这个问题,我也不会惊讶如果未来node.js提供类似的功能。
文章主要讨论的第二个缺点是:如果你阻塞了主线程,整个服务器都会被阻塞。
他举的一个例子其实是滥用:他实现了一个忙等待,而不是订阅一个事件。用正确的编程方式,这种情况根本不应该发生。
另一个例子更有道理:如果你有CPU密集型的计算,最好不要在主线程上进行。解决这个问题的简单方法是开一个工作线程,让它进行计算,而不去碰主线程使用的内存。等计算完成后,它再在主线程上调用一个回调。不过我不确定node.js是否提供这个功能。但因为很多服务器应用并不是CPU密集型的,所以这通常不是问题。
总体来说,这篇文章质量很低,更多的是在讲作者自己,而不是node.js。你不应该让它影响你的决定。