为什么不经常使用并行编程?

时间:2012-04-03 07:06:38

标签: java parallel-processing

自1998年以来,我一直在进行软件开发(Java),并与许多不同的团队合作解决各种不同的问题。在任何时间段内都没有任何团队使用并行编程方法。尽管多核处理器已经存在了一段时间,但我发现并行编程模型在现实世界中仍然很大程度上被忽略以解决问题。那么,为什么不经常使用并行编程呢?这似乎是一种使事物更具可扩展性,更高效并且通常可以提高程序性能的好方法。

5 个答案:

答案 0 :(得分:1)

因为在像Java这样的多线程共享内存环境中正确地进行并行编程实际上是非常很难。你实际上保证会犯很难诊断的错误。当然,这是额外的努力。

此外,大多数人工作的程序类型是工作流程系统。这些桌面版本对性能不是很重要,并且通过让每个请求由其自己的线程提供服务,webapps / server组件很容易并行化。这样做的好处是开发人员不必真正处理并行方面。

答案 1 :(得分:1)

因为并行编程不适用于所有可能的问题,并且因为编写正确的并发程序很难。特别是确保线程在没有不必要的锁定的情况下正确同步并不容易。此外,根据线程调度的时间发生的错误很难重现,查找和修复。如果你有一个并发错误,每100,000次交易就会发生一次并且它发生在生产而不是你的开发系统上(我已经在那里......),这是非常讨厌的。

阅读书籍Java Concurrency in Practice,这是关于Java并发编程的最佳书籍。

答案 2 :(得分:1)

  并行编程模型在现实世界中仍然被忽视以解决问题

我认为 用于解决问题的地方。但它不是免费的,所以当更简单的串行(同步)解决方案运行良好时,最好不要并行(异步)做任何事情。

答案 3 :(得分:0)

真正的并行编程(在多个内核中分离问题)对于长时间运行的算法来说非常有用。大多数现实应用程序都是更多事件处理器这些事件通常会并行运行(想想一个Web服务器有多个线程来处理请求)。当编程用于解决算术问题时,它被更频繁地使用(想想优化,数据分析等)

答案 4 :(得分:0)

我认为您的观点是错误的,例如,当您拥有服务器端应用程序时,应用程序服务器处理线程的任何请求(可能从线程池中实现)。

我想任何需要并行(多线程)模型的地方都需要并行编程。

以下链接中提供了有用的信息: