多线程 并发编程与异步方法

2023-11-14

1. Parallel Programming中的PLINQ, Parallel Class与Task Parallelism的特点?

    并发编程的内容类似于Google的Map-Reduce的算法。多线程的着眼点是线程的互斥,同步等。而并行编程的着眼点是如何提高多个CPU利用率。书中描述了未来的景象,PC机有32个内核。这个在Server中估计已经是现实了。而宏观的例如Map-Reduce不仅仅是CPU Cores之间的并发,更是成千上万个计算机之间的并发。这属于分布式计算的范畴了。这里讨论的也就是C# 4.0中的这些并发计算的概念依旧是如何将任务分解成Work Items以便充分应用所有的内核。这是Parallel Programming和Multi Thread之间的主要区别。

     服务器端与桌面开发:

     服务器端面临的主要问题是高并发,需要确保用户响应时间,采用的方法是多线程。面临两个瓶颈,一是thread的创建与销毁,二是现场的保护与恢复。

     解决第一个问题采用的是ThreadPool或者Asynchronous Programming。解决第二个问题是合理设置线程的数量。

     桌面端采用UI 线程和Background 线程结合的方式,也是要确保用户响应时间。

2.关于多线程

   关于多线程的同步,互斥等的机制及其实现在实际应用中有一定的困难,尤其是debug。但是当OO与多线程结合时线程用到的数据需要特别注意。"You need to be alsolutely clear in you head on where the infomation you're working with live, where it came from, and whether other threads might be able to see it."。

To summarize: infomation that really does live on the stack is private to a particular thread. Unfortuately, using local variables doesn't necessarily guarantee that the state you're working with is on the stack. Be wary of reference types-no matter where the reference lives, the thing it refers to will not be on the stack, so you need to understand what other code might have a reference to the object you're using.

 有两类阐述的模式,一类告诉你是什么,一类告诉你它的背景,意图以及所适用的范围。例如SpinLock与Lock的区别。SpinLock用了问询的方式目的是避免使用OS的scheduler。目的相同但采用不同的手段就意味着它各有其适用的场景。SplinLock就适合contention很少或者竞争的线程执行的时间很短的情况。

3. Asynchronous Delegate VS Asynchronous Method

  • Asynchronous delegate 使用的是BeginInvoke and EndInvoke;
  • Asynchronous method 使用的是BeginXXX and EndXXX. 例如File.BeginRead;

4. 应用Thread Pool的几种情况:

  •  Task Parallel Library or PLINQ
  •  ThreadPool.QueueUserWorkItem      
  •  Asynchronous delegate
  •  BackgroundWorker

   注意: Task 是QueueUserWorkItem的替代者。Task<TResult>是Asynchronous delegate的替代者

   TPL中的Error Handling:

    TPL设法确保程序没有忽略异常,所以TPL中的异常必须处理。

  •  采用ContinueWith;
  • Try ...  Catch;

5. ThreadPool.QueueUserWorkItem 与 Asynchronous delegate的区别

  • Asynchronous delegate可以从线程返回数据;
  • Asynchronous delegate可以接收任意数量及类型的参数;
  • Asynchronous delegate可以返回异常到调用者;

6. Synchronization

  • Simple Blocking: Wait, Sleep, Join
  • Locking:  独占锁: lock(Monitor.Enter/Monitor.Exit),  Mutex, SpinLock; 非独占锁: Semaphore, SemaphoreSlim, ReaderWriterLockSlim.
  • Signaling:  Event wait handle(AutoResetEvent/ManualResetEvent),  Monitor.Wait/Monitor.Pulse,  CountdownEvent,  Barrier.
  • Nonblocking Synchronization:  Thread.MemoryBarrier, Thread.VolatileRead, Thread.VolatileWrite, volatile, Interlocked

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程 并发编程与异步方法 的相关文章

随机推荐

  • LaTeX公式符号总结(Markdown适用)

    文章目录 1 希腊字母 小写字母 大写字母 2 符号 箭头符号 二元运算符 逻辑符号 集合符号 特殊符号 3 运算和函数 4 矩阵和多行列式 5 括号与空格 6 颜色 字体颜色 背景颜色 RGB颜色和自定义 默认支持颜色 本文从 Typor
  • 开发日记(4)如何将Bitmap转换成Uri?

    1 bitmap to uri Uri uri Uri parse MediaStore Images Media insertImage getContentResolver bitmap null null 2 uri to bitma
  • 阿里:MySQL 单表数据最大不要超过多少行?为什么?

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • 2023AIGC人才趋势洞察报告

    导读 自ChatGPT于2022年11月发布至今 其大大超出预期的 涌现 能力使得AIGC赛道被彻底点燃 从人力资源角度观察 AIGC相关的岗位明显增加的同时 人才对于此类岗位的投递也愈发积极 值得注意的是 AIGC并不单单是属于ICT行业
  • iOS APP 如何做才安全

    本来 写了一篇 iOS 如何做才安全 逆向工程 Reveal IDA Hopper https抓包 等 发现文章有点杂 并且 iOS 如何做才安全 这部分写的越来越多 觉得 分出来更清晰一点 所以拆成两部分 同时也是为了大家能 共同讨论 毕
  • osgEarth加载SXEarth下载的mbtiles地图文件(win10)

    使用晟兴地球 SXEarth 通过互联网下载mbtiles格式的地图文件 然后使用osgEarth加载 晟兴地球 SXEarth 下载地图文件 晟兴地球SXEarth是一款永久免费的3DGIS平台软件 由北京晟兴科技有限公司开发 支持在线G
  • 二分法,平衡二叉树、B树、B+树

    二分法 平衡二叉树 B树 B 树 二分法 二分法查找 算法要求 比较次数 二分法到二叉树 平衡二叉树 平衡二叉树概念 平衡二叉树的构建规则 平衡二叉树特点 B树 B tree B树的构建规则 B树的查询流程 B 树 B 树构建规则 B 树和
  • 【华为OD机试 2023】货币单位换算(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • 成功解决Win7 64位系统下GraphEdit 不能显示Directshow.net远程图表的问题

    首先问题如题 我是Win7 64位旗舰版操作系统 VS2010 使用Directshow net开发播放器程序 结果发现通过以前使用的GraphEdit无论如何不能看到远程图表 不管是重新注册spy dll PropPage dll等文件
  • 倒沖法-線邊倉

    倒冲法 倒冲法 Back flush 目录 隐藏 1 倒冲法概述 2 倒冲法的应用 3 倒冲法的隐性会计处理 1 4 倒冲错误的产生原因及处理程序 1 5 参考文献 编辑 倒冲法概述 倒冲法 Back flush 是ERP系统根据产成品收料
  • git错误 error: failed to push some refs to ‘https://github.com/...

    1 解决办法 git错误 error failed to push some refs to https github com 问题原因 远程库与本地库不一致造成的 在hint中也有提示把远程库同步到本地库就可以了 解决办法 使用命令行 g
  • Orange pi3 LTS Ubuntu22.04通过源码编译的方式安装opencv(C++版)

    硬件 orangepi 3 LTS 之前安装opencv的时候遇到了很多奇奇怪怪的错误 所以干脆重新写入系统后开始安装 安装Ubuntu22 04的过程按照官方提供的用户手册来操做 官方用户手册下载链接 http www orangepi
  • C++基础知识 - explicit 关键字

    explicit 关键字 作用是表明该构造函数是显示的 而非隐式的 不能进行隐式转换 跟它相对应的另一个关键字是implicit 意思是隐藏的 类构造函数默认情况下即声明为implicit 隐式 include
  • Ansible自动化运维工具学习-第二天

    Ansible入门学 第二天 前言 亲爱的小伙伴 如果你已经阅读了博主的Ansible 第一天相信你应该对Ansible有了一定的了解 不知道关于如何利用Ansible实现集群归档备份你有没有学会呢 今天暂且不谈Ansible的各个模块 因
  • Neo4j 数据导入导出

    前提条件 切换至neo4j 安装目录的bin 文件夹 D neo4j neo4j community 3 4 6 bin 或者配置全局环境变量 执行数据导出命令 neo4j admin dump database graph db to s
  • [Vue warn]: Cannot find element: #app

    解决方案 js在html页面头部引入的原因 自定义js文件要最后引入 因为要先有元素id vue才能获取相应的元素
  • 消息队列中间件 - Docker安装RabbitMQ、AMQP协议、和主要角色

    概述 不管是微服务还是分布式的系统架构中 消息队列中间件都是不可缺少的一个重要环节 主流的消息队列中间件有RabbitMQ RocketMQ等等 从这篇开始详细介绍以RabbitMQ为代表的消息队列中间件 AMQP协议 AMQP协议是一个提
  • Python使用plot()函数画图进阶使用

    目录 使用介绍 plot 函数进阶使用 1 全局信息代码 2 绘图代码 1 画布设置 2 函数传入参数设置 3 函数内部代码解读 4 函数调用 5 plt tight layout 函数的使用 6 最后做出图形如下 使用介绍 在前文 Pyt
  • 读书:《素书新解》(一)

    黄石公的 素书 分六章 原始 正道 求人之志 本德宗道 遵义 安礼 共132句 1636字 夫道 德 仁 义 礼 五者一体也 我问了一下ChatGPT 给出五者的更详细的解释 道 德 仁 义 礼是中国传统文化中的重要概念 它们代表了人们追求
  • 多线程 并发编程与异步方法

    1 Parallel Programming中的PLINQ Parallel Class与Task Parallelism的特点 并发编程的内容类似于Google的Map Reduce的算法 多线程的着眼点是线程的互斥 同步等 而并行编程的