最近想把写过的一个多线程程序整理一下,这个程序主要特点是有一系列的互相之间有依赖关系的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. 管理表空间和数据文件<六>

    数据库管理 -- 管理表空间和数据文件  介绍 表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库则是存放在表空间中,表 空间由一个或多个数据文件组成. 数据库 ...

  2. 关于使用tracert命令检测网络问题

    tracert命令是一个电脑网络工具-Windows命令行界面程序和内建命令,运行该命令后可以显示本机IP到达目标IP所经过的路由器IP地址,和响应的延迟信息! 在windows操作系统中,点击“开始 ...

  3. 团队作业week2

    软件分析和用户需求调查 (2013) 具体内容参看邹欣老师的博客:http://www.cnblogs.com/xinz/p/3308608.html. 作业提交期限:2013年9月25日上课前.

  4. [Chapter 3 Process]Practice 3.12 Including the initial parent process, how many processes are created by the program shown in Figure 3.32?

    3.12 Including the initial parent process, how many processes are created by the program shown in Fi ...

  5. [keepalved]主从上同时出现VIP,无法消失情况

    双主架构中,keepalived日志出现: more /var/log/messageOct 9 03:16:22 mysql-dzg-60-148 Keepalived_vrrp[8526]: VR ...

  6. React Native填坑之旅--HTTP请求篇

    如果不能从头到尾的建立一个RN应用,那么RN将失色不少.本以为HTTP请求部分需要使用Native的实现,Android和iOS各回各家,各调各库了.Google了一下之后居然RN可以使用fetch库 ...

  7. Mac中brew的安装

    brew是Mac OS的一个软件包管理工具,使用简单方便,就像ubuntu中的apt-get命令一样官方地址:http://brew.sh/index_zh-cn.html 终端下运行 /usr/bi ...

  8. Windows7上搭建Cocos2d-x 3.1.1开发环境

    前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0.首先就从开发环境的大家说起吧. 开发工具 ...

  9. 2014年市场需求排名前10的编程语言 - 生命的延续是 BI

    开篇介绍 2014年就快收尾了,Team 内部每人都会准备一些 Tech Talk 的内容,技术方面的,咨询方面的都可以.我就准备了一些有关 BI 排名,BI 报表排名,包括各种技术编程语言等相关排名 ...

  10. Wix 安装部署教程(三)自定义安装界面和行为

    接上一篇自定义安装界面,这篇继续探索,首先介绍下,Wix为我们定义了五种风格,每种风格的UI都是有一定顺序的.我们可以改变安装顺序,也可以完全自定义一个Dialog插入其中.比如Wix_Mondo 风 ...