自1998年以來,我一直在從事軟件開發(使用Java),並與許多不同的團隊合作解決各種不同的問題。從來沒有任何團隊使用並行編程方法。儘管多核處理器已經存在了一段時間,但我發現並行編程模型在現實世界中仍然在很大程度上被忽略來解決問題。那麼,爲什麼並行編程不經常使用?這似乎是讓事情更具伸縮性,更高效並通常可以提高程序性能的好方法。爲什麼不經常使用並行編程?
1
A
回答
0
真正的並行編程(在多個內核中分離問題)對於長時間運行的算法很有意義。大多數現實應用程序都是更多事件處理器通常這些事件將並行運行(考慮一個具有多個線程來處理請求的Web服務器)。當使用編程來解決一道算術題,它是應用較多(想想優化,數據分析等)
1
因爲就在一個多線程共享內存的環境中,如Java獲得並行編程是真的,真的硬。你幾乎可以保證做出很難診斷的錯誤。當然這是額外的努力。
此外,大多數人工作的程序類型是工作流系統。這些桌面版本不是性能至關重要的,並且通過讓每個請求由其自己的線程提供服務,webapps/server組件並不重要。這具有開發人員無需處理並行方面的優勢。
1
由於並行編程不適用於所有可能的問題,並且因爲編寫正確的併發程序很困難。特別是確保線程正確同步而沒有不必要的鎖定並不容易。此外,根據線程調度的時間發生的錯誤很難重現,查找和修復。如果每10萬次事務發生一次併發錯誤,並且這種錯誤發生在生產環境而不是您的開發系統上(我去過那裏......),那很令人討厭。
閱讀本書Java Concurrency in Practice,這是關於Java中併發編程的最佳書籍。
1
並行編程模型仍主要在現實世界中忽略解決問題
我認爲這是正在使用它解決了問題。但它並不是免費的,所以當一個簡單的串行(同步)解決方案運行良好時,最好不要並行(異步)執行任何操作。
0
我認爲你的看法是錯誤的,例如你有一個服務器端應用程序,應用程序服務器處理任何請求的線程(也許從線程池實現它)。
我想任何需要並行(多線程)模型的地方都需要編程並行。
有一個在下面的鏈接有用的信息:
相關問題
- 1. ccache爲什麼不經常使用gcc?
- 2. 爲什麼Python程序員不經常使用屬性?
- 3. 爲什麼泛型經常使用T?
- 4. 爲什麼VS經常使用「this」?
- 5. 爲什麼makecontext不併行線程
- 6. 爲什麼第4行不生成未經檢查的異常?
- 7. 爲什麼不使用C編程語言進行Web開發
- 8. 爲什麼VC++ 2010經常使用ebx作爲「零寄存器」?
- 9. 爲什麼運行時異常是未經檢查的異常?
- 10. 爲什麼Flex Builder無法經常連接應用程序?
- 11. 行爲規模經常不起作用
- 12. 爲什麼會話ID經常變化?
- 13. 爲什麼標準經常關閉?
- 14. 爲什麼不能經>
- 15. 爲什麼shell輸出經常在其輸出中使用`mixed_characters'?
- 16. 爲什麼shell腳本比較經常使用x $ VAR = xyes?
- 17. 爲什麼JSP頁面經常使用!在網址?
- 18. 爲什麼在Django 1.5文檔中經常使用url函數?
- 19. 爲什麼在Javascript中經常使用助手方法?
- 20. 並行編程使用OpenMP
- 21. 「動態」編程與「正常」編程有什麼不同?
- 22. 爲什麼不dismissWithClickedButtonIndex曾經調用clickedButtonAtIndex?
- 23. 爲什麼並行性ForkJoinPool會使我的異常加倍?
- 24. 在DDD中,爲什麼他們經常使用方法而不是屬性?
- 25. JSON.NET:爲什麼使用JToken - 曾經?
- 26. 爲什麼我必須使用vs2005進行InfoPath2010編程
- 27. 什麼是-lnuma和什麼程序使用它進行編譯?
- 28. 爲什麼線程不能在java中並行運行?
- 29. Asp.Net DbContext ...爲什麼在我的應用程序中經常這麼叫? ...混亂
- 30. 爲什麼Clojure wrap使用未經檢查的異常來檢查異常?
不對的地方要問。 http://programmers.stackexchange.com/更相關。簡而言之,並行編程確實很難。 – 2012-04-03 07:07:58
只是好奇:你一直在做什麼樣的問題? – ArjunShankar 2012-04-03 07:10:12
有趣的一面是,並行編程在生物物理學中有很多使用,女性主要適應所需的思維方式。 – 2012-04-03 07:18:22