最近想把写过的一个多线程程序整理一下,这个程序主要特点是有一系列的互相之间有依赖关系的task。于是在网上找相关类库

1,一类是简单的线程池了,这也是原本俺的做法。之前使用的是手工调度,代码实现的很蛋疼。
外面的lib有poco https://pocoproject.org/slides/130-Threads.pdf

3,微软的并行库
1)MS PPL (Parallel Patterns Library)之类的类库,感觉这里一类本质上和1没有大的分别
2)MS tpl (Task Parallel Library) ,是Dataflow,可以显式指明task之间的依赖关系
https://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx
http://blog.i3arnon.com/2016/05/23/tpl-dataflow/
3) MS Asynchronous Agents Library ,没研究,抽空看看

Update 20161220: 貌似大家对这个actor model不满意,他实现得不够完整,并且很久没有更新。 http://www.cnblogs.com/cutepig/p/6206114.html
https://msdn.microsoft.com/en-us/library/dd492627.aspx
https://msdn.microsoft.com/en-us/library/ff601928.aspx
4) MS Concurrency Runtime,没看过,有时间研究下
From stackoverflow, The concurrency runtime is a cooperative scheduling infrastructure也就是说需要task互相协作,如果某个task是io密集的,就不适合?
https://msdn.microsoft.com/en-us/library/ff601929.aspx
https://msdn.microsoft.com/en-us/library/dd504870.aspx
5) AMP https://msdn.microsoft.com/en-us/library/hh265137.aspx
6) MS CCR (Concurrency and Coordination Runtime)
https://msdn.microsoft.com/en-us/library/bb648752.aspx

more
https://msdn.microsoft.com/zh-cn/library/ff963546.aspx

3, 有人说过asyn, future之类,但这一类其实都没有优化task调度

6, actor model
貌似这是普遍的公认的并行处理方法,其好处是task互相隔离,通过发消息彼此通信实现同步

caf: https://www.actor-framework.org/ c++11的写法比较爽
caf读书笔记 http://www.cnblogs.com/zhejiangxiaomai, http://blog.csdn.net/xzwdev/article/details/41700001, http://wenku.baidu.com/view/7e2b6be16529647d2728528e.html, https://arxiv.org/pdf/1505.07368.pdf,https://pdfs.semanticscholar.org/9bc2/003f58a240143bcfdb1f58183e8a172b7d05.pdf,https://www.meetup.com/ACCU-Bay-Area/events/233766624/
Theron 写法有点蛋疼,但其实可以用c++11包一层的
SObjectizer

skynet https://github.com/cloudwu/skynet/wiki
https://github.com/i11cn/simple-cpp-actor

7,task dependency based c++ library
这一类稳定的类库比较少,很多都是用来写paper
其实可以在actor model包装一层函数实现这一类的用法

比如 SuperGlue: http://tillenius.github.io/superglue/ It's a C++98 header-only library for tasks with dependencies between them.
https://github.com/RichieSams/FiberTaskingLib
http://www.des.udc.es/~basilio/papers/Gonzalez13-DepSpawn.pdf

papers
http://www.ademiller.com/tech/reports/paraplop_2010_the_task_graph_pattern.pdf
8,intel 的类库
1)tbb
2)cnc (Concurrent Collections for C++)
https://icnc.github.io/api/tutorial.html
据说很不同,有空研究下

3)intel tbb-flow-graph
https://www.threadingbuildingblocks.org/tutorial-intel-tbb-flow-graph

9,hpx http://stellar.cct.lsu.edu/files/hpx-0.9.99/html/hpx/tutorial/examples/accumulator.html
没研究过
10,Spark
没研究过
11,相关资料
Stream processing https://en.wikipedia.org/wiki/Stream_processing
Dataflow programming
Actor model
Data-driven programming
Digital signal processing
Event-driven programming
Flow-based programming https://en.wikipedia.org/wiki/Flow-based_programming
Functional reactive programming
Glossary of reconfigurable computing
High-performance reconfigurable computing
Incremental computing
Parallel programming model
Partitioned global address space
Signal programming
Stream processing
Pipeline (Unix)
Yahoo Pipes

C++多线程开发之actor model的更多相关文章

  1. iOS多线程开发之GCD(中篇)

    前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...

  2. iOS多线程开发之NSOperation - 快上车,没时间解释了!

    一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...

  3. iOS多线程开发之NSOperation

    一.什么是NSOperation? NSOperation是苹果提供的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更加的面向对象.代码可读性更高.可控性更强 ...

  4. iOS多线程开发之GCD(死锁篇)

    上篇和中篇讲解了什么是GCD,如何使用GCD,这篇文章将讲解使用GCD中将遇到的死锁问题.有兴趣的朋友可以回顾<iOS多线程开发之GCD(上篇)>和<iOS多线程开发之GCD(中篇) ...

  5. iOS多线程开发之GCD(中级篇)

    前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...

  6. Java 多线程开发之 Callable 与线程池

    前言 我们常见的创建线程的方式有 2 种:继承 Thread 和 实现 Runnable 接口. 其实,在 JDK 中还提供了另外 2 种 API 让开发者使用. 二.简单介绍 2.1 Callabl ...

  7. iOS 多线程开发之OperationQueue(二)NSOperation VS GCD

    原创Blog.转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn.net/column/details/huang ...

  8. iOS多线程开发之NSThread

    一.NSThread基本概念 NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程,需要手动管理线程的生命周期,处理线程同 ...

  9. 多线程开发之GCD

    简介GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Grand Central Dispatch的简称,它是基于C语言的. ...

随机推荐

  1. 浪潮不能进bios解决过程

    开机时会有个提示一闪而过,经过拍摄视频观看发现是"Press DEL to SETUP or TAP to post" 但是,反复重启不停按Delete键都无效,都进入了Ctrl+ ...

  2. ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决

    http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422461614 ...

  3. 【Java学习笔记】Map

    Map: 一次添加一对元素,也称为双列集合. 而Collection,一次添加一个元素,称为单列集合. 常用方法: 1.添加 value  put(key,value);        返回前一个与k ...

  4. UML用例图中泛化、扩展、包括

    在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...

  5. Linux部署apache

    一.我们使用源码安装 官网:https://httpd.apache.org/文档:https://httpd.apache.org/docs/2.4/ 下载源码包 httpd-2.4.20.tar. ...

  6. Lvs之NAT、DR、TUN三种模式的应用配置案例

    LVS 一.LVS简介     LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...

  7. SpringMVC上传文件

    SpringMVC中上传文件还是比较方便的,Spring内置了一些上传文件的支持类,不需要复杂的操作即可上传文件. 文件上传需要两个jar支持,一个是commons-fileupload.jar和co ...

  8. BZOJ3173 TJOI2013最长上升子序列(Treap+ZKW线段树)

    传送门 Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input ...

  9. Extjs的GridPanel的RowExpander的扩展

    对Extjs的grid使用,有时候单单使用其中的某些组.或某些行是远远不够的,还需要对行进行一些扩展,如:与filters相似的row扩展控件,如下 这个控件,我也是从网上找的小例子,按照其内部的某些 ...

  10. java的四种引用,强弱软虚

    1.利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的 ...