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

1. 并发一般涉及如下几个方面:2

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

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

3. 异步2

4. 同步与锁关键字2

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

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. 5,Actor模型7

21. Qa7

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

22.1. Java并发编程实战(第16届Jolt大奖提名图书,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://blog.csdn.net/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中的本质,本质都是多线程。

异步,简单的讲就是BeginInvoke、EndInvoke模式,它在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

ThreadPool(BackgroundWorker,Timer)

异步

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. 5,Actor模型

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

21. Qa

.2:何时用异步,何时用线程或线程池

这需要从“IO操作的DMA(Direct 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并发编程实战(第16届Jolt大奖提名图书,Java并发编程必读佳作

作者:Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug 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: 第5章 C++内存模型和原子

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

Atitit.并发编程原理与概论 attilax总结相关推荐

  1. Atitit 《控制论原理与概论attilax总结

    Atitit <控制论原理与概论attilax总结 <控制论> 奠基之作,出自创始人维纳.虽然内容权威,但我认为带有相当强烈的个人色彩,且门槛较高,不适合入门.深入研究控制论必看书籍 ...

  2. Atitit.ide技术原理与实践attilax总结

    Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...

  3. Java并发编程原理与实战六:主线程等待子线程解决方案

    Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...

  4. Java并发编程原理与实战一:聊聊并发

    一.大纲 •你真的了解并发吗 •多线程和并发 •多线程和多进程 •线程一定快吗 •学习并发的四个阶段 •学习目标 •适合人群 •荐书 二.学习并发的四个阶段 •熟练掌握API,能够完成并发编程 •熟读 ...

  5. 吐血整理-高级程序员必备Java并发编程原理,没时间看建议收藏

    简介: Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,这一系列几篇文章将揭开Java内存模型的神秘面纱.这一系列的文章大致分4个部分,分别是: Java内存模型基础, ...

  6. java 多进程多线程_Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题...

    一.进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?另外,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而 ...

  7. 【转】Java多线程编程(十)-并发编程原理(分布式环境中并发问题)

    转载地址:http://blog.csdn.net/leicool_518/article/details/42268947 在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么 ...

  8. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

  9. java lock park_java并发编程-LockSupport中park与unpark基本使用与原理简单分析

    文章目录 java并发编程原理之---park与unpark 基本使用 情况一,先park再unpark,代码举例与分析 情况二,先unpark再park,代码举例与分析 特点 原理之park &am ...

  10. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

最新文章

  1. 获取php数组的键名和值
  2. oracleI基础入门(8)--table--MINUS
  3. 2020蓝桥杯省赛---java---B---8(走方格)
  4. 论文浅尝 | 解决知识图谱补全中的长尾关系和不常见实体问题
  5. android root截图软件下载,截屏软件(无需ROOT)
  6. mysql拆分英文数字_MySQL中的REGEX仅显示由连字符分隔的数字。
  7. 使用内存映射文件来共享数据
  8. VPC2007与VServer2005R2比较
  9. 虚幻开放日2017ppt
  10. lua中variables和table
  11. 4、BFS算法套路框架——Go语言版
  12. 开源GIS与空间数据库实战教程
  13. Eclipse中导入项目前有红叉提示但是项目内容不报错解决办法
  14. 怦然心动(Flipped)-5
  15. php单页菜单,CSS3单页切换导航菜单界面设计的实现详解
  16. 电脑win7做系统备份
  17. 怎么用大众都懂的语言解释黎曼空间?
  18. 机器翻译和人工智能翻译,语言学与机器翻译
  19. html2canvas微信头像没绘制,解决使用canvas生成含有微信头像的邀请海
  20. vivado仿真出错

热门文章

  1. SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL(转载)
  2. MSSQL优化教程之1.4 其他几种类型的页面
  3. Spring Cloud微服务分布式云架构源码结构
  4. Java web中的web-xml中标签定义之jsp-config
  5. 简单的form表单操作(Servlet)
  6. IBM核心软件如何应对“互联网+”的技术挑战
  7. LR学习笔记十 之 场景分析
  8. [转]c++中RTTI的观念和使用
  9. 中文搜索引擎技术揭密-网络蜘蛛
  10. 学习PetShop3.0(9)工厂的资料