2011-12-20 59 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