Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在大型多线程C++;程序? 我目前正在编写一个大型多线程C++程序(>50K LOC)。_C++_Multithreading - Fatal编程技术网

在大型多线程C++;程序? 我目前正在编写一个大型多线程C++程序(>50K LOC)。

在大型多线程C++;程序? 我目前正在编写一个大型多线程C++程序(>50K LOC)。,c++,multithreading,C++,Multithreading,因此,我一直在积极阅读大量关于处理多线程代码的各种技术。我发现一个很酷的理论是: 它是由一位稍有名气的人发明的,他对并发编程做出了其他不平凡的贡献 然而,CSP是否在实践中使用?有人能指出任何以CSP风格编写的大型应用程序吗 谢谢 这种风格在Unix上随处可见,在Unix中,许多工具被设计为从标准输入到标准输出进行处理。我对以这种方式构建的大型系统没有任何第一手知识,但我见过许多小型一次性系统 例如,这个简单的命令行使用(至少)3个进程 cat list-1 list-2 list-3 | s

因此,我一直在积极阅读大量关于处理多线程代码的各种技术。我发现一个很酷的理论是:

它是由一位稍有名气的人发明的,他对并发编程做出了其他不平凡的贡献

然而,CSP是否在实践中使用?有人能指出任何以CSP风格编写的大型应用程序吗


谢谢

这种风格在Unix上随处可见,在Unix中,许多工具被设计为从标准输入到标准输出进行处理。我对以这种方式构建的大型系统没有任何第一手知识,但我见过许多小型一次性系统

例如,这个简单的命令行使用(至少)3个进程

cat list-1 list-2 list-3 | sort | uniq > final.list

这个系统只是中等大小,但我编写了一个协议处理器,它剥离并解释消息中的连续协议层,使用了与此非常类似的样式。这是一个事件驱动的系统,使用了类似于协作线程的东西,但是我可以很容易地使用多线程,再加上一些调整

这个程序是专有的(不幸的是),所以我不能展示源代码


在我看来,这种风格在某些方面是有用的,但通常最好与其他一些技术相结合。通常,程序的核心部分会出现处理瓶颈,应用各种提高并发性的技术可能会带来最大的收益。

微软有一种称为ActiveMovie的技术(如果我没记错的话),可以对音频和视频流进行顺序处理。数据从一个过滤器传递到另一个过滤器,以从输入格式转换为输出格式(以及源/接收器)。也许这是一个实际的例子???

是和否。CSP的基本思想被大量使用。例如,一种或另一种形式的线程安全队列经常被用作主要(通常是唯一的)通信机制,以从单个进程(线程)构建管道

然而,他最初的理论远不止这些。他发明了一种用于讨论进程的符号,定义了一组可以在进程之间发送的特定信号,等等。从那以后,符号以各种方式得到了改进,在证明各个方面做了大量工作,等等

应用相对正式的顾客服务提供商模型(与一般想法相反)的情况要少得多。在一些系统中,高可靠性被认为是极其重要的,但很少有程序员对学习(另一种)正式的设计符号感兴趣


当我设计这样的系统时,我通常使用一种不太严格但(至少对我来说)更容易理解的方法:一个相当简单的图表,方框表示流程,箭头表示通信线路。我怀疑我是否真的能提供很多关于大多数设计的证据(我承认我没有用这种方式设计一个真正庞大的系统),但它仍然运行得相当好。

CSP作为一种过程演算,从根本上说是一种理论,它使我们能够形式化和研究并行程序的某些方面

如果您想要一种能够构建分布式程序的理论,那么您应该看看

并行结构编程是当前HPC(high-performance computing)研究的基础,它为您提供了一种方法论,介绍如何接近和设计并行程序(本质上是通信计算节点的流程图)和运行时系统来实现它们

并行结构化编程的中心思想是算法框架,最初由Murray Cole开发。骨架是一种类似于并行设计模式的东西,具有相关的成本模型和(通常)支持它的运行时系统。一个骨架模型,研究并支持一类具有一定“形状”的并行算法

作为一个显著的例子,mapreduce(由Google流行)只是一种解决数据并行性的框架,其中计算可以通过映射阶段(将函数f应用于构成输入数据的所有元素)和缩减阶段(获取所有转换的项,并使用关联运算符“组合”它们)来描述

我发现并行结构化编程的思想在理论上和实践上都很有用,所以我建议大家看看


关于多线程的一句话:由于骨架解决了大规模并行性,因此它们通常在分布式内存中实现,而不是在共享内存中实现。英特尔开发了一种工具,它可以解决多线程问题,并且(部分)遵循并行结构化编程框架。它是一个C++库,所以你可以开始在你的项目中使用它。

< P>维基百科文章看起来像很多有趣的符号,用来表示一些行人概念。对于非常大或可扩展的程序,形式主义对于检查(子)进程如何进行交互非常重要

对于一个50000行的类程序,您最好按照自己认为合适的方式来设计它


一般来说,就性能而言,遵循这样的想法是一个好主意。分阶段处理数据的持久性线程将倾向于不争用,并且很好地利用数据局部性。此外,当一个快速的阶段向一个缓慢的阶段馈送数据时,可以很容易地限制线程以避免数据堆积:如果快速的阶段的输出缓冲区太大,只需阻止它。

请查看一家名为的公司的网站。他们的ASD技术基于CSP,被飞利浦医疗、爱立信和NXP半导体等公司用于为各种高科技设备和应用构建软件

所以要回答你的问题:是的,