Atitit.并发编程原理与概论 attilax总结

 

 

Atitit.并发编程原理与概论 attilax总结html

 

 

1. 并发通常涉及以下几个方面:2c++

2. 线程安全性  2.2 原子性    2.3 加锁机制2程序员

2.1. 线程封闭3.3.1Ad-hoc线程封闭   3.3.2 栈封闭   3.3.3ThreadLocal2算法

3. 异步2编程

4. 同步与锁关键字2c#

5. 5.2 并发容器并发集合2promise

6. Future模式 2缓存

7. 5.3 阻塞队列和生产者-消费者模式5.3.2 串行线程封闭 5.3.3 双端队列与工做密取 2安全

8. 5.4 阻塞方法与中断方法 2数据结构

9. 5.5 同步工具类 5.5.1 闭锁 5.5.2FutureTask5.5.3 信号量 5.5.4 栅栏 3

10. 5.6 构建高效且可伸缩的结果缓存3

11. 线程池3

12. 7.1 任务取消3

13. 任务并行库(TPL) 4

14. 死锁的避免与诊断4

15. 原子变量与非阻塞同步机制4

16. 协程4

17. 异步、多线程、任务、并行的本质4

18. 如今,该用什么来编写多线程 5

18.1.1. 1,异步编程5

19. 响应式编程6

20. ,数据流编程6

20.1. 5Actor模型7

21. Qa7

22. Java c# .net c++的并发技术7

22.1. Java并发编程实战(第16Jolt大奖提名图书,Java并发编程必读佳做8

22.2. Java并发技术8

22.3. C#多线程编程实战( ((美...8

22.4. Line 278:   《C++并发编程实战》 Line 285: 1章 你好,C++并发世界9

22.5. C#并发编程经典实例》9

1. 并发通常涉及以下几个方面:

1. 多线程编程(已过期,不介绍)

2. 异步编程

3. 并行编程

4. 响应式编程

5. 数据流编程

 

2. 线程安全性  2.2 原子性    2.3 加锁机制

 

2.1. 线程封闭3.3.1Ad-hoc线程封闭   3.3.2 栈封闭   3.3.3ThreadLocal

 

3. 异步

4. 同步与锁关键字

5. 5.2 并发容器并发集合

6. Future模式

做者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

7. 5.3 阻塞队列和生产者-消费者模式5.3.2 串行线程封闭 5.3.3 双端队列与工做密取

8. 5.4 阻塞方法与中断方法

9. 5.5 同步工具类 5.5.1 闭锁 5.5.2 FutureTask   5.5.3 信号量 5.5.4 栅栏

10. 5.6 构建高效且可伸缩的结果缓存

11. 线程池

第8章 线程池的使用
8.1 在任务与执行策略之间的隐性耦合
8.1.1 线程饥饿死锁
8.1.2 运行时间较长的任务
8.2 设置线程池的大小
8.3 配置ThreadPoolExecutor
8.3.1 线程的建立与销毁
8.3.2 管理队列任务
8.3.3 饱和策略
8.3.4 线程工厂

 

 

12. 7.1 任务取消


7.1.1 中断
7.1.2 中断策略
7.1.3 响应中断
7.1.4 示例:计时运行
7.1.5 经过Future来实现取消
7.1.6 处理不可中断的阻塞
7.1.7 采用newTaskFor来封装非标准的取消
7.2 中止基于线程的服务
7.2.1 示例:日志服务
7.2.2 关闭ExecutorService
7.2.3 “毒丸”对象
7.2.4 示例:只执行一次的服务
7.2.5 shutdownNow的局限性
7.3 处理非正常的线程终止

13. 任务并行库(TPL)

14. 死锁的避免与诊断

15. 原子变量与非阻塞同步机制

16. 协程

17. 异步、多线程、任务、并行的本质

这四个概念对应在CLR中的本质,本质都是多线程。

异步,简单的讲就是BeginInvokeEndInvoke模式,它在CLR内部线程池进行管理;

多线程,体如今C#中,能够由类型Thread发起。也能够由ThreadPool发起。前者不受CLR线程池管理,后者则是。FCL团队为了各类编程模型的方便,还另外提供了BackgroundWorker和若干个Timer,基本上它们都是ThreadPool的增强,增长了一些和调用者线程的交互功能;

任务(Task),为FCL4.0新增的功能,在一个称之为任务并行库(TPL)的地方,其实也就是System.Threading.Tasks命名空间下。任务并行库名字取的很玄乎,其实它也是CLR线程池的增强。优化了线程间的调度算法,增长了和调用者线程的交互功能;

并行(Parallel),为FCL4.0新增的功能,也属于TPL。并行在后台使用Task进行管理,说白了,由于Task使用的线程池线程,因此Parallel天然使用的也是线程池线程进行管理,它的本质仅仅是进一步简化了Task。在这里要增进一个对于并行的理解。实际上,多线程自然就是并行的。及时不用任务并行库,用Thread类型新起两个线程,CLR或者说Windows系统也会将这两个线程根据须要安排到两个CPU上去执行。因此,并非由于多了任务并行库,CLR才支持并行计算,任务并行库只是提供了一组API,使咱们可以更好的操纵线程进行并行开发而已。

 

18. 如今,该用什么来编写多线程 

若是你在FRAMEWORK4.0下编写代码,那么应该按照这个优先级来撰写多线程代码: 

优先

次优先

不得以

Parallel(含扩展库PLinq

Task

ThreadPoolBackgroundWorkerTimer

异步

Thread

这个表知足了大部分状况下的一个优先级指导,但在某些状况下会有例外。

多线程编程(已过期,不介绍)

18.0.1. 1,异步编程

异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。

微软还特地把异步编程分做了3种不一样的模型:基于任务的模式(TAP)就是我上面推荐的这种,基于事件的模式(EAP)和异步编程模型(APM)我上面不推荐的事件和回调。

 

19. 响应式编程

响应式编程最近成为了一个Buzzword,其实微软6年前就开始给.NET提供一个Reactive 
Extensions
了。一开始要理解响应式编程有点困难,可是一旦理解了,你就会对它的强大功能爱不释手。简单来讲,响应式编程把事件流看做数据流,不过数据流是从IEnumable中拉取的,而数据流是从IObservable推送给你的。为何响应式编程能够实现并发呢?这是由于Rx作到线程不可知,每次事件触发,后续的处理会从线程池中任意取出一个线程来处理。且能够对事件设置窗口期和限流。举个例子,你能够用Rx来让搜索文本框进行延迟处理(而不用相似我很早的时候用个定时器来延迟了)。

20. ,数据流编程

数据流(DataFlow)编程可能你们就更陌生了,不过仍是有些经常使用场景可使用数据流来解决。数据流实际上是在任务并行库(TPL)上衍生出来的一套处理数据的扩展(也结合了异步的特性),TPL也是处理并行编程中任务并行和数据并行的基础库。

望文生义,TPL DataFlow就是对数据进行一连串处理,首先为这样的处理定义一套网格(mesh),网格中能够定义分叉(fork)、链接(join)、循环(loop)。数据流入这样的处理网格就可以并行的被处理。你能够认为网格是一种升级版的管道,实际上不少时候就是被看成管道来使用。使用场景能够是“分析文本文件中词频”,也能够是“处理生产者/消费者问题”。

 

20.1. 5Actor模型

Scala有Akka,其实微软研究院也推出了Orleans来支持了Actor模型的实现,固然也有Akka.NET可用。Orleans设计的目标是为了方便程序员开发须要大规模扩展的云服务,

 

 

21. Qa

.2:什么时候用异步,什么时候用线程或线程池

这须要从“IO操做的DMADirect Memory Access)模式讲起。经过DMA的数据交换几乎能够不损耗CPU的资源。在硬件部分,硬盘、网卡、声卡、显卡等都有DMA功能。能够简单的认为,当咱们的工做线程须要操做I/O资源的时候(如读取一个大文件、读取一个网页、读取Socke包等),咱们就须要用异步去作这些事情。异步模式只会在工做开始以及工做结束的时候占用CLR线程池,其它时候由硬盘、网卡等硬件设备来处理具体的工做,这就不会过多占用到CPU空间和时间损耗。 

归纳而言:

计算密集型工做,直接采用线程;

IO密集型工做,采用异步机制;

当咱们不清楚什么工做是I/O密集型的,一个不是很恰当的指导就是:查看FCL类型成员,若是成员提供了相似BeginDosomething方法的,则优先使用它,而不是新起一个线程或丢到线程池。

 

3.4:什么时候用Thread 
以上的各类线程模型,它们最终都是Thread。 那么何时须要Thread直接出场呢?

最重要的使用Thread的理由是,咱们须要控制线程的优先级。Thread之上的线程模型都不支持优先级设置。设置一个线程的高优先级可使它得到更多的CPU时间;

再者,能够控制线程为前台线程。固然,由Thread新起的线程默认就是前台线程。前台线程不随着调用者线程的中断而中断,这使得咱们能够用Thread来进行一些关键性的操做。

 

22. Java c# .net c++的并发技术

22.1. Java并发编程实战(第16Jolt大奖提名图书,Java并发编程必读佳做

做者:Brian GoetzTim PeierlsJoshua BlochJoseph BowbeerDavid HolmesDoug Lea 著,童云兰 等译

 

 

1章 简介

 第2章 线程安全性

 第3章 对象的共享

 第4章 对象的组合

 第5章 基础构建模块

 第6章 任务执行

 第7章 取消与关闭

 第8章 线程池的使用

 第9章 图形用户界面应用程序

 第10章 避免活跃性危险

 第11章 性能与可伸缩性

 第12章 并发程序的测试

 第13章 显式锁

 第14章 构建自定义的同步工具

 第15章 原子变量与非阻塞同步机制

 第16章 Java内存模型

 

 

22.2. Java并发技术

Executor框架

 

22.3. C#多线程编程实战( ((美... 

第1章 线程基础  lock关键字 1.11 使用Monitor类锁定资源
 2章 线程同步
 3章 使用线程池
4章 使用任务并行库
5章 使用C# 5.0
6章 使用并发集合
7章 使用PLINQ
8章 使用Reactive Extensions
9章 使用异步I/O
10章 并行编程模式
11章 更多信息

 

22.4. Line 278:   《C++并发编程实战》 Line 285: 1章 你好,C++并发世界 

Line 300: 2章 管理线程

Line 311: 3章 在线程间共享数据

Line 329: 4章 同步并发操做

Line 348: 5C++内存模型和原子

Line 370: 6章 设计基于锁的并发数据结构

Line 380: 7章 设计无锁的并发数据结构

 

22.5. C#并发编程经典实例》

 1 章 并发编程概述  

2 章 异步编程基础  

3 章 并行开发的基础  

4 章 数据流基础  

5 章 Rx 基础  

6 章 测试技巧  

7 章 互操做  

8 章 集合  

9 章 取消  

10 章 函数式OOP

11 章 同步  

12 章 调度  

13 章 实用技巧  

参考资料

异步、多线程、任务、并行编程之一:选择合适的多线程模型 - Luminji - 博客园.html

我为何喜欢用C#来作并发编程-博客-云栖社区-阿里云.html

 

atiend

相关文章
相关标签/搜索