3 回答

TA貢獻1818條經(jīng)驗 獲得超8個贊
問題很多,就我看到的問題來回答:
這屬于并發(fā)嗎? 不一定。到服務器的邏輯處理處究竟是并發(fā)還是并行還是要看其機制。
你說的數(shù)據(jù)混亂之類的,可能是指多線程操作一個對象而導致每個線程持有對象副本不一致而造成臟讀臟寫。就這里幾個關鍵字你可以進行擴展搜索。
線程安全不看語言??梢杂藐犃薪鉀Q,這里會有一個臨界區(qū)的概念。
消耗大量的cpu資源也是要看是什么樣的操作的,比如大量的數(shù)據(jù)庫持久化那么肯定是IO密集型操作,不吃CPU;反而要進行大量計算的,那么就是CPU密集型操作。在這里,如果真的是啟動大量線程在后臺服務器中運行,CPU會忙著切換線程而消耗盡其資源。
tomcat是個服務器,但它會不會消耗大量CPU資源還是得看你怎么使用的。同時它也是個容器,你在容器里跑app起大量線程,如之前所說,肯定會消耗大量CPU資源。就算你在ngnix+php里也會這樣。

TA貢獻2016條經(jīng)驗 獲得超9個贊
簡單說一下吧。
1.你的例子場景屬于并發(fā)場景,但是技術實現(xiàn)可以多種多樣,但是不妨礙這個場景可以并行爭奪資源的本質(zhì)。引發(fā)的問題很容易得出,就是無順序的并行運算修改檢查共享資源(火車票票數(shù)),會導致最終結果與邏輯結果不一致。
2.你的疑惑集中在java是不是相對處理并發(fā)更安全,說明你對于java等語言的機制了解與運用不是很深入,并發(fā)問題無論什么語言都需要程序員針對應用語言的特性與提供的工具去解決實際問題,優(yōu)先解決的自然是并發(fā)安全問題,也就是上面說的在并發(fā)情境下如何讓共享資源的最終結果與邏輯結果一致,可以用鎖、隊列等技術,本質(zhì)上都是在某一個關鍵運算點位變成順序或者事務執(zhí)行等,以保證共享資源的原子性、可見性。進階就是并發(fā)場景下的性能與可用性。
3.語言的適用場景是不同的,沒有絕對的什么語言比什么語言好,我們只能說在什么情況下一般的技術選型什么更適合。tomcat是一個web容器,但是很顯然它是個java web容器,也就是說它除了提供普通的web服務外也提供java相關的很多功能。java本身是支持線程操作的,量級比進程更輕,也意味著同樣配置的服務器,同一種業(yè)務,java開啟的處理線程更多,處理線程越多當然高點并發(fā)性能表現(xiàn)就更好,也就越節(jié)省物理運算資源。然而php是以進程為單位開啟的,所以并發(fā)處理能力基于上面的描述在高點是不如java web的。但是如果你的并發(fā)場景并不“高”,需要快速實現(xiàn)業(yè)務而且也有精通php的程序員,php當然是優(yōu)先考慮。
添加回答
舉報