2011-06-17 59 views
2

令我驚訝的是,我發現AppEngine應用程序服務器請求串行。最近,Java應用程序有可能同時服務器請求,默認情況下禁用(reference)。爲什麼在AppEngine/Java中默認禁用併發請求?

默認情況下禁用併發請求的原因是什麼? Web應用程序本質上意味着同時處理多個請求,無論它們是用Java,Python還是PHP編寫的。在我看來,這是一種人爲的限制。

+0

看起來我需要改變我的配置。我不知道這一點。 – Kaj 2011-06-17 11:59:52

回答

1

我認爲這是默認情況下更好的選項,因爲許多新手程序員正在編寫appengine並期望使用比scale/volume更小的方法。

併發PHP或python(基於進程)不會混淆對象數據,但Java可以(基於線程)。這是主要的區別。

+0

感謝您的回覆。作爲一名Java Web程序員,我應該對線程安全和不安全的知識有所瞭解。像Tomcat或Jetty這樣的Servlet容器不會阻止它,我仍然不明白爲什麼appengine會這樣做。 – 2011-06-17 11:55:42

6

這可能與開始時不支持併發請求的AppEngine有關。該功能僅在版本1.4.3(2011年3月30日)中添加了Java。因此,一些開發人員可能已編碼並測試其應用程序,以便一次只針對單個線程正常運行。

一旦Google構建基礎架構和代碼以支持併發請求,他們可能會默認啓用併發性,因爲它可能會破壞現有應用程序。因此,選擇加入方式的原因。

有一些GAE民衆檢查StackOverflow,所以我們可能需要聽到他們的確認。

+1

這是完全正確的。 – 2011-06-20 02:02:55

1

可能避免迴歸對已經部署的應用程序,而不是線程安全的...

0

在GAE文檔中,「注意:如果你想使用的併發請求,您的應用程序代碼需要你之前使用正確的線程同步啓用「。對併發請求的危險性非常明確。
正如上面其他人所說的那樣,這樣做並不危險,因爲默認情況下不允許此功能,並將其提供給深入研究文檔的高級開發人員。
然而,它是寫得很小,在文檔的末尾,所以它不容易看到它:)

+0

嗯,我看到了。但鑑於GAE中的線程受到嚴格限制,而且IMO沒有理由在這方面使GAE變得更加複雜,因爲這是一個「普通的」J2EE應用程序,但我仍然沒有看到重點是什麼在默認情況下禁用它。 – 2011-06-17 12:42:46

相關問題