随笔分类 - [00-2]同步与异步
摘要:本随笔续接:.NET 同步与异步 之 Mutex (十二) 在前一篇我们已经提到过Mutex和本篇的主角们直接或间接继承自 WaitHandle: Mutex类,这个我们在上一篇已经讲过。 EventWaitHandle 类及其派生类AutoResetEvent 和 ManualResetEvent
阅读全文
摘要:本随笔续接:.NET 同步与异步 之 线程安全的集合 (十一) 本随笔 及 接下来的两篇随笔,将介绍 .NET 同步与异步系列 的最后一个大块知识点:WaitHandle家族。 抽象基类:WaitHandle, 三个子类: EventWaitHandle(Event通知) 、Mutex(进程同步锁)
阅读全文
摘要:本随笔续接:.NET 同步与异步 之 警惕闭包(十) 无论之前说的锁、原子操作 还是 警惕闭包,都是为安全保驾护航,本篇随笔继续安全方面的主题:线程安全的集合。 先看一下命名空间:System.Collections.Concurrent,常用的类型有(均为泛型):BlockingCollectio
阅读全文
摘要:本随笔续接:.NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九) 至此、同步与异步 相关的常规操作(比较常见的操作)、差不多已经介绍完毕。 本随笔就着重说一下闭包、因闭包可能会导致一些意想不到的的bug。 (PS:至于 WaitHandle家族相关随笔、最后补
阅读全文
摘要:本随笔续接:.NET 同步与异步之锁(ReaderWriterLockSlim)(八) 之前的随笔已经说过、加锁虽然能很好的解决竞争条件,但也带来了负面影响:性能方面的负面影响。那有没有更好的解决方案呢?有,原子操作、即 Interlocked 这个类。 一、让我们先看一个计数的原子操作Demo /
阅读全文
摘要:本随笔续接:.NET 同步与异步之锁(Lock、Monitor)(七) 由于锁 ( lock 和 Monitor ) 是线程独占式访问的,所以其对性能的影响还是蛮大的,那有没有一种方式可是实现:允许多个线程同时读数据、只允许一个线程写数据呢?答案是肯定的。 读写锁 ReaderWriterLock
阅读全文
摘要:本随笔续接:.NET同步与异步之相关背景知识(六) 在上一篇随笔中已经提到、解决竞争条件的典型方式就是加锁 ,那本篇随笔就重点来说一说.NET提供的最常用的锁 lock关键字 和 Monitor。 一、lock关键字Demo 这一组demo,代码简洁,逻辑简单,一个 AddIndex 方法 保证字段
阅读全文
摘要:在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然、这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里。以下是前五篇随笔的目录: .NET 同步与异步之封装成Task(五) .NET 实现并行的几种方式(四) .NET 实现并行的几种方式(三) .NET 实现
阅读全文
摘要:本随笔续接:.NET 实现并行的几种方式(四) 前篇随笔已经介绍了几种可以实现并发的方式,其中异步方法、是最简便的方式。而 异步方式是基于 Task 和 async修饰符和await运算符实现的。 换句话说:如果我们有了Task、就有了异步方法。 在随笔:.NET 实现并行的几种方式(二) 中,已经
阅读全文
摘要:本随笔续接:.NET 实现并行的几种方式(三) 八、await、async - 异步方法的秘密武器 1) 使用async修饰符 和 await运算符 轻易实现异步方法 前三篇随笔已经介绍了多种方式、利用多线程、充分利用多核心CPU以提高运行效率。但是以前的方式在WebAPI和GUI系统上、 使用起来
阅读全文
摘要:本随笔续接:.NET 实现并行的几种方式(二) 在前两篇随笔中,先后介绍了 Thread 、ThreadPool 、IAsyncResult (即 APM系列) 、Task 、TPL (Task Parallel Library)。 写到这些笔者突然意识到 还有一个EMP系列没有写,在这里补充一下:
阅读全文
摘要:本随笔续接:.NET 实现并行的几种方式(一) 四、Task 3)Task.NET 4.5 中的简易方式 在上篇随笔中,两个Demo使用的是 .NET 4.0 中的方式,代码写起来略显麻烦,这不 .NET 4.5提供了更加简洁的方式,让我们来看一下吧。 /// <summary> /// Task.
阅读全文
摘要:好久没有更新了,今天来一篇,算是《同步与异步》系列的开篇吧,加油,坚持下去(PS:越来越懒了)。 一、Thread 利用Thread 可以直接创建和控制线程,在我的认知里它是最古老的技术了。因为out了、所以不再写例子了。 二、ThreadPool 由于线程的创建和销毁需要耗费大量的资源,为了提过性
阅读全文