首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程范式?

线程范式?
EN

Stack Overflow用户
提问于 2009-02-27 20:12:10
回答 5查看 2K关注 0票数 0

有没有什么范例可以让你有不同的心态,或者对编写多线程应用程序有不同的看法?也许感觉上有很大的不同,比如过程编程和函数编程。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-27 20:18:12

对于不同的问题,并发有许多不同的模型。concurrency的维基百科页面列出了一些模型,还有一个concurrency patterns的页面,它为不同类型的并发方法提供了一些很好的起点。

你采取的方法很大程度上取决于手头的问题。不同的模型可以解决并发应用程序中可能出现的各种不同的问题,有些模型建立在其他模型的基础上。

在课堂上,我学到了concurrency结合使用mutual exclusionsynchronization来解决并发问题。有些解决方案只需要一个,但是使用这两个解决方案,您应该能够解决任何并发问题。

对于一个截然不同的概念,你可以看看不变性和并发性。如果所有数据都是不可变的,那么传统的并发方法甚至都不是必需的。This article探讨了这个话题。

票数 2
EN

Stack Overflow用户

发布于 2009-02-27 20:21:49

我真的不理解这个问题,但是如果你开始使用CUDA进行一些编码,我会给你一些关于多线程应用程序的不同的思考方式。

它不同于一般的多线程技术,如信号量、监视器等,因为您同时拥有数千个线程。因此,CUDA中的并行性问题更多地存在于对数据进行分区和稍后混合数据块。

对常见的串行问题进行彻底反思的一个小例子是SCAN算法。它就像这样简单:

给定集合{a,b,c,d,e}的

我想要以下一套:

{a,a+b,a+b+c,a+b+c+d,a+b+c+d+e}

在这种情况下,符号'+‘是任何交换运算符(不仅是加号,你还可以做乘法)。

如何并行实现这一点?这是对这个问题的一个彻底的重新思考,在这个paper中描述了它。

在NVIDIA website中可以找到CUDA中不同算法的更多实现

票数 0
EN

Stack Overflow用户

发布于 2009-02-27 20:47:05

好吧,一个非常保守的范式转变是从以线程为中心的并发(共享一切)到以进程为中心的并发(地址空间分离)。这样可以避免意外的数据共享,并且更容易在不同子系统之间实施通信策略。

这是一个古老的想法,由Micro-Kernel OS社区传播(在其他方面),以构建更可靠的操作系统。有趣的是,微软研究院的Singularity OS原型表明,在使用此模型时,甚至不需要传统的地址空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/596449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档