并发编程对我来说是相当困难的:甚至看基本幻灯片对我来说也是很有挑战性的。看起来太抽象了。
了解并发编程概念有什么好处?它能帮助我进行常规的顺序编程吗?我知道了解我们的程序是如何工作的是一种满足,但还有什么?
发布于 2011-10-21 03:27:16
这里有一个快速而简单的动机:如果您想为最小、最弱的系统以外的任何东西编写代码,那么您将编写并发代码。
想为云写字吗?云中的计算实例很小。你不会得到大的,你会得到很多小的。突然间,你的小web应用变成了一个并发的应用。如果您设计得很好,那么您就可以在获得客户时添加更多的服务器。否则,您必须学习如何在实例的负载平均值固定不变的情况下。
好吧,你想写桌面应用程序吗?每件事都有一个双核或更多核心CPU。除了最便宜的机器。而拥有最便宜的机器的人可能不会为你昂贵的软件买单,对吗?
也许你想做移动开发?嘿,iPhone 4S有一个双核CPU。剩下的就不会太晚了。
电子游戏?Xbox 360是一个多CPU系统,索尼的PS3本质上是一个多核系统.
除非您正在处理微小的、简单的问题,否则您无法摆脱并发编程。
2016年更新:目前35美元的Raspberry Pi是围绕手机芯片上的四核系统开发的。人工智能的巨大进步在一定程度上归功于高端显卡作为并行计算引擎的可用性。
发布于 2011-10-21 06:51:07
从1970年到2002年,处理器的速度每18个月翻一番。所以作为一个程序员,你所要做的就是等待,这样你的程序就会运行得更快。问题是,2002年前后,规则发生了变化。现在,他们不是在制造更大的快速处理器,而是在制造更小、更慢的处理器,而是将它们分组输出。我正在工作的计算机现在有4个核心,并且有多达8个核心的芯片(每个核心有4个线程)。很快,我们将有更多的核心芯片。
因此,如果您编写的程序完全不是并发的,您会发现您使用的是一个核心或线程,但其余的CPU却什么也不做。因此,如果您有16个核心,1将运行您的程序,而其他15个是坐在那里!
并发性的问题在于它是不确定的。也就是说,您不知道不同线程将按照什么顺序执行任务。传统上,程序员试图通过使用锁之类的方法来解决这个问题。这导致了很多痛苦。拥有多个线程可以自由访问的某种形式的可变状态通常是痛苦和黑臭虫的公式!
最近的趋势是转向功能语言,它严格控制可变状态。函数语言处理并发性有两种基本方法。第一种方法是使用消息传递。这最好由Erlang来展示。在Erlang中,通常进程之间没有共享状态。他们的交流不是通过分享记忆,而是通过我传递的信息。这对你来说应该是有意义的,因为我们现在正在做。我是通过发送信息给你的,而不是通过你从我的脑子里记住它!通过切换到消息传递,大多数锁定错误就会消失。此外,消息可以通过网络传递,也可以在一个节点内传递。
另一种方法是STM,它代表,它存在于clojure和Haskell (和其他方法)中。在STM中,内存是共享的,但更改只能通过事务进行。就像数据库的人在1970年S的时候发现的那样,我们很容易就能确保我们做得对。
实际上,我简化了一点,Clojure和Haskell都可以进行消息传递,Erlang可以执行STM。
免责声明我是用Erlang编程服务的作者,它将在未来几周内提前发布。
发布于 2011-10-21 08:43:57
因为当你最不期望的时候,并发就会在你脸上爆炸.
https://softwareengineering.stackexchange.com/questions/115474
复制相似问题