首页 文章

软件架构,并行处理和异步模式[重复]

提问于
浏览
2

可能重复:并行架构的设计模式有哪些好的资源?

我发现越来越多的代码朝着异步和并行的方向发展 . 我从事Web应用程序,必须处理Web服务(客户端>服务器和服务器>服务器) . 我正在寻找有关异步和并行编程的软件架构和设计模式的良好资源 .

为了统一一点,我们可以专注于使用异步技术实现并行编程的模式和体系结构 . 专注于内置支持回调的语言 .

1 回答

  • 4

    恕我直言,关于这个主题的唯一/最好的书(软件架构,并行处理和异步模式)是"Concurrent Programming on Windows" by Joe Duffy .

    是的,它在 Headers 中有"Windows",但是在作者的几十年中,他们已经认真地考虑了几百年的重要概念,并且在其他地方找不到的并发编程的重要概念(系统) ,硬件,虚拟机,语言等)(“为什么我写这本书”非常有趣,恕我直言 . )

    无论您的语言和平台如何,都有大量的信息 . 本书的前半部分是简单地让你思考问题 . 当Windoze的东西出现时,理解“可重复使用”的架构示例可能是什么样子,有好有坏,以及做出多少牺牲仍然有帮助 . Windoze有一些特定的东西(例如,线程“光纤”),但即使这样也可以显示(1)问题是什么(例如,昂贵的线程上下文切换),以及(2)可能的解决方案(例如,单独的)来自线程的数据堆栈,因此数据堆栈切换很快) . 我不使用光纤,也不使用任何特定于Windoze的“可重用库”,但这些权衡对您来说非常重要(例如何时在任何给定平台上使用“通用”线程池,什么时候自己写 .

    它讨论了很多常见的设计选项,比如(典型的)“Thread-Stealing-Work-Queue”,其中“任务”被创建并添加到队列中,并且每个线程“窃取/吃掉”线程可用时来自FIFO队列的那些项目 . 简而言之,本书讨论了如何以不同的方式思考问题,而不是历史OO或命令式方法 .

    例如,在阅读了几本书之后(以及其他地方收集到的其他信息),我们重新编写了所有内容:我们再也不会 sleep() 我们的主题了 . 他们总是以100%的速度工作,或者换掉(比如在需要完成新工作时醒来的"thread pool") . 即使对于并发性,也有一些新颖的方法可以让你重新编写你的(写得很好的)英文学期论文,这样它就能写得更好 .

    如你所述,回调是一种方法 . 我通常使用"Functor-like"来处理那些处理诸如跨线程信令或数据的跨线程封送等问题的东西 . signal/slot 范例也适用于此,并且像Qt这样的一些实现非常好地处理跨线程信令 . 然而,这个话题是如此巨大,以至于我对这种讨论的任何给定设计方法或语言都过于谨慎地挖掘......

    但是,和你一样,我必须从某个地方开始 . 这本书(我在今年 Spring 天读到)帮助了我真正的并发理解,尽管我已经在许多系统/平台上使用一堆不同的设计方法接触了多年的硬件/软件并发性 .

    让我知道你是否找到了另一本这样的书...我也想读一本书(一个人真的需要“反转”一个人的大脑,以便在异步/并发/并行的环境中自然地设计选项),我在这个主题上找到的大多数东西对于给定的语言或技术都非常狭窄 .

相关问题