误解一:并发就是多线程
实际上多线程只是并发编程的一种形式,在C#中还有很多更实用、更方便的并发编程技术,包括异步编程、并行编程、TPL 数据流、响应式编程等。
误解二:只有大型服务器程序才需要考虑并发
服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体验的要求越来越高。程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据、与服务器通信等),这正是并发编程的目的之一。
误解三:并发编程很复杂,必须掌握很多底层技术
C# 和 .NET 提供了很多程序库,并发编程已经变得简单多了。尤其是 .NET 4.5 推出了全新的 async 和 await 关键字,使并发编程的代码减少到了最低限度。

上述摘自译者序。
本书基本信息:
著    [美] Stephen Cleary
译    相银初

市面上关于并发的技术书,大多是Java相关。有个前辈推荐了这本书,耐心看了一遍,真心觉得真是不错,决定精读并写一个系列笔记博客。前辈推荐的时候是去年年初,到现在决定写博客,已经一年半过去,羞愧羞愧,执行力不高,但总归是开始着手做了,希望能坚持下来。

提到并发就不得不提并行,即并行(Parallel)和并发(Concurrent)的区别。
知乎的一个回答我觉得拿来解释最合适不过,这个解释的角度是从CPU为出发点。
并发与并行的区别? - 刘志军的回答 - 知乎

并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机

咖啡机指CPU,排队的队伍可以是线程(thread)也可以是进程(process)。
进程(process)和线程(thread)的概念描述打算独立成文,下次就写。

在对误解一的解释中,可以看出作者是认为并行编程也属于并发编程的。是的,并行应该是属于并发的一种,对并发的概念来说,并行可以认为是并发的一种特殊情况。

在后续的笔记中我会将书中的伪代码实例尝试写成可运行的代码,用于自己强化理解和记忆,这也是精读的意义所在。写的代码有所不足之处,望不吝指教。

《C#并发编程经典实例》学习笔记-关于并发编程的几个误解的更多相关文章

  1. 《C#并发编程经典实例》笔记

    1.前言 2.开宗明义 3.开发原则和要点 (1)并发编程概述 (2)异步编程基础 (3)并行开发的基础 (4)测试技巧 (5)集合 (6)函数式OOP (7)同步 1.前言 最近趁着项目的一段平稳期 ...

  2. 《C#并发编程经典实例》学习笔记—2.7 避免上下文延续

    避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行. 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法 ...

  3. 《C#并发编程经典实例》学习笔记—3.1 数据的并行处理

    问题 有一批数据,需要对每个元素进行相同的操作.该操作是计算密集型的,需要耗费一定的时间. 解决方案 常见的操作可以粗略分为 计算密集型操作 和 IO密集型操作.计算密集型操作主要是依赖于CPU计算, ...

  4. 《C#并发编程经典实例》学习笔记—2.3 报告任务

    问题 异步操作时,需要展示该操作的进度 解决方案 IProgress<T> Interface和Progress<T> Class 插一段话:读<C#并发编程经典实例&g ...

  5. 《C# 并发编程 · 经典实例》读书笔记

    前言 最近在看<C# 并发编程 · 经典实例>这本书,这不是一本理论书,反而这是一本主要讲述怎么样更好的使用好目前 C#.NET 为我们提供的这些 API 的一本书,书中绝大部分是一些实例 ...

  6. [书籍]用UWP复习《C#并发编程经典实例》

    1. 简介 C#并发编程经典实例 是一本关于使用C#进行并发编程的入门参考书,使用"问题-解决方案-讨论"的模式讲解了以下这些概念: 面向异步编程的async和await 使用TP ...

  7. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  8. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  9. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  10. WCF学习笔记之事务编程

    WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...

随机推荐

  1. HTML5开发和布局(待补充)

    移动开发准则 1.尽量使用单页面开发(SPA) 2.慎选UI框架 3.动画.特效使用(60fps) **浏览器消耗最小的CSS属性** 位置:transform:translate(x,y,z) 大小 ...

  2. mvc项目 ajax post 返回404错误

    后台代码没有问题,但是一直出现404错误 原因:iis设置,请求中文件大小超过限制会被过滤掉,直接返回404. 解决:设置iis,应用程序->请求筛选->规则->编辑功能设置-> ...

  3. some knowledge of language

    1:编译型语言2:解释型语言编译型:编译形成结果,再整体运行解释型:运行产生结果,边解释运行java 特殊(.class)再解释3:脚本语言是解释语言它的优点是方便阅读,不需要写非常多的类型相关的代码 ...

  4. eclipse 导入包含子maven项目的maven项目时的正确方式(父子项目)

    eclipse 导入包含子maven项目的maven项目时的正确方式(父子项目) NO1 导入时依次选择 import > Maven > Existing Maven Projects ...

  5. ORACLE提交事务回滚

    execute执行后 可以回滚 commit提交后 闪回恢复原来的数据 其实Oracle提交数据是分两步操作的,第一步execute执行,第二步commit提交.对应的PL\SQL也是要先点execu ...

  6. gitlab导入现在git项目

    确保管理员所在机器的ssh 公钥已经保存在gitlab网站上. 这样管理员可以在自己的机器上和gitlab系统交互. 现在在管理员自己的机器上,进入项目目录(项目目录拷贝自git server,目录后 ...

  7. 像纸质笔记本一样给div,textarea添加行的分割线

    想要给textarea添加一个背景图来实现 但是背景图有几个问题, 1.每个div或者textarea的line-height不一样,对于每个不同的line-height都需要一个不同的背景图 2.当 ...

  8. [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)

    升级内容:添加根据标签群发接口,重构原根据分组群发接口  参考微信文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp14811 ...

  9. 利用WindowsServiceWrapper(WinSW)将nginx包装为系统服务

    1.WindowsServiceWrapper(WinSW) Github:https://github.com/kohsuke/winsw/ 下载地址:http://repo.jenkins-ci. ...

  10. Android JNI 学习(八):Calling Instance Methods Api

    一.GetMethodID jmethodIDGetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig); 返回 ...