多线程实践的示例问题

时间:2009-01-15 10:31:56

标签: multithreading language-agnostic

我想,我即将解决我认为的难题。我需要多线程化生产者和消费者的管道。

所以我想从小做起。在不同的难度下,哪些练习问题对多线程练习有好处? (而且你在不专注于并发的书中看到的并不是人为的,不切实际的例子。)

您建议哪些书籍或参考文献专注于并发性并提供深入的问题和案例?

(我宁愿不专注于我想要解决的问题。我只想要求好的参考和示例问题。这对其他用户更有用。我不是卡住关于这个问题。)

7 个答案:

答案 0 :(得分:3)

The little book of semaphores是一本很好的免费书。作者采用了一种独特的方法,首先提出问题然后在回答之前提出提示。问题的难度逐渐增加,本书不是针对任何语言编写的,而是涵盖了一般的多线程概念。

答案 1 :(得分:2)

大多数教科书问题,如读者 - 作家,制片人 - 消费者或餐饮哲学家都是互斥体的例证。我更愿意对原型进行建模,这是一个简单的近似,是一个更大的问题并继续进行。

我有时会看到需要使用死锁避免的情况,并且正在使用死锁预防措施。分析Banker的算法是否适合这种情况总是一个好主意。

答案 2 :(得分:2)

如果你有足够的时间投资,我会推荐Jeff Magee和Jeff Kramer撰写的“Concurrency:State Models& Java Programs,2nd Edition”,John Wiley& Sons 2006

如果您使用其他语言

,则可以忽略Java部分

有一种语言用于模拟流程和并发进程,称为FSP。为了精通语言,需要投入一些时间和精力。有一个工具(LTSA,两者都是免费的,并且由Eclipse插件或独立应用程序支持),它可以验证您的模型,并且从并发执行的角度来看,您的模型是正确的。

将这些模型翻译成您的语言结构只是一个编程技术和一些设计模式的问题。

答案 3 :(得分:2)

完全忽略了您的请求,我建议您应该考虑SEDA(分阶段事件驱动架构),以此来考虑设置生产者和消费者的多线程管道。

答案 4 :(得分:1)

我不确定你在找什么。但在现实世界的企业情况下,我们通常在做生产者消费者时使用某种消息框架。简而言之,在Java中,JMS。您可以使用优秀的Spring Framework来帮助您。

答案 5 :(得分:1)

如果你正在使用Java(可能即使你不是),你一定要阅读Java Concurrency In Practice

答案 6 :(得分:0)

老实说,许多真实的多线程程序除了读取/写入某些值(无论是字符串还是int)外,还没有做太多的事情 - 循环缓冲区(作为网络连接可能需要),日志文件的读取器/写入器,等

事实上,我会说,如果你实现(或找到)一个实体(和通用)循环缓冲区,然后通过这些缓冲区作为唯一的联系点运行所有线程到线程的通信,那将覆盖您可能需要执行的任何多线程同步的很大一部分。 (除非你在一个符合流行语的环境中工作,并且需要在“流行语”列表中添加“企业”,“消息”或其他内容......或者你正在编写数据库或操作系统。)

(注意“循环缓冲区”是一个相当以C为中心的术语,其根源在于对内存块的相对直接操作.Python的Queue类以列表为中心的方式实现相同的基本原则,而我是确定许多其他语言在概念上类似的结构,名称略有不同......)