01 2018 档案

摘要:一. 简介 1. 背景: 虽然前面EF的扩展插件Z.EntityFramework.Extensions,性能很快,而且也很方便,但是该插件要收费,使用免费版本的话,需要定期更新,如果不更新,将失效,非常麻烦,这个时候SqlBulkCopy类既免费又高效,显得非常合适了。 2. 使用步骤: ①. 引 阅读全文
posted @ 2018-01-29 17:23 Yaopengfei 阅读(2571) 评论(8) 推荐(1) 编辑
摘要:一. 四大并发集合类 背景:我们目前使用的所有集合都是线程不安全的 。 A. ConcurrentBag:就是利用线程槽来分摊Bag中的所有数据,链表的头插法,0代表移除最后一个插入的值. (等价于同步中的List) B. ConcurrentStack:线程安全的Stack是使用Interlock 阅读全文
posted @ 2018-01-29 17:02 Yaopengfei 阅读(1886) 评论(3) 推荐(3) 编辑
摘要:一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁,两个核心方法: Enter:锁住某个资源。 Exit:退出某一个资源。 测试案例:开启5个线程同时对一个变量进行自增操作,结果变量有序的输出,说明该锁同时只允许一个线程访问。 但是写法很麻烦,每次都要try-ca 阅读全文
posted @ 2018-01-19 08:21 Yaopengfei 阅读(1579) 评论(1) 推荐(0) 编辑
摘要:一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案。 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 事件锁包括: A. 自动事件锁(AutoResetEvent) 使用场景:可以用此锁实现多线程环境 阅读全文
posted @ 2018-01-17 15:14 Yaopengfei 阅读(1415) 评论(4) 推荐(0) 编辑
摘要:一. 锁机制的背景介绍 本章节,将结合多线程来介绍锁机制, 那么问题来了,什么是锁呢? 为什么需要锁? 为什么要结合多线程来介绍锁呢?锁的使用场景又是什么呢? DotNet中又有哪些锁呢? 在接下来的几个章节中,将陆续解答这些问题。 PS: 多个线程对一个共享资源进行使用的时候,会出问题, 比如实际 阅读全文
posted @ 2018-01-15 22:11 Yaopengfei 阅读(1224) 评论(4) 推荐(0) 编辑
摘要:一. async和await简介 PS:简介 1. async和await这两个关键字是为了简化异步编程模型而诞生的,使的异步编程跟简洁,它本身并不创建新线程,但在该方法内部开启多线程,则另算。 2. 这两个关键字适用于处理一些文件IO操作。 3. 好处:代码简介,把异步的代码写成了同步的形式,提高 阅读全文
posted @ 2018-01-14 18:51 Yaopengfei 阅读(2116) 评论(4) 推荐(0) 编辑
摘要:一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行。(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的优势,同时开启多个线程并行执行。(典型代表Parallel.For循环 下面例子从1-100无序执行 阅读全文
posted @ 2018-01-13 16:46 Yaopengfei 阅读(1685) 评论(3) 推荐(0) 编辑
摘要:一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程、线程等待、线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的Task<TResult>,然后可以通过Task的实例调用Result属性来获取这个返回值。 下面我们分三类来介 阅读全文
posted @ 2018-01-10 08:01 Yaopengfei 阅读(3716) 评论(1) 推荐(0) 编辑
摘要:一. 传统的线程取消 所谓的线程取消,就是线程正在执行的过程中取消线程任务。 传统的线程取消,是通过一个变量来控制,但是这种方式,在release模式下,被优化从cpu高速缓存中读取,而不是从内存中读取,会造成主线程无法执行这一个bug。 PS: 通过上面的代码看可以看出来,传统模式的线程取消,在排 阅读全文
posted @ 2018-01-07 19:03 Yaopengfei 阅读(11874) 评论(4) 推荐(6) 编辑
摘要:一. 整体说明 揭秘: 该章节的性质和上一个章节类似,也是一个扩展的章节,主要来研究Task类下的实例方法ContinueWith中的参数TaskContinuationOptions。 通过F12查看TaskContinuationOptions的源码,知道主要有这么几个参数: ①. LazyCa 阅读全文
posted @ 2018-01-06 08:13 Yaopengfei 阅读(3482) 评论(1) 推荐(0) 编辑
摘要:一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究TaskCreationOptions类的作用。 该类主要用来处理父子线程之间的关系,重要的几个参数 阅读全文
posted @ 2018-01-05 16:26 Yaopengfei 阅读(3008) 评论(4) 推荐(2) 编辑
摘要:一. 背景 揭秘: 在前面的章节介绍过,Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比较笨拙,在面对复杂的业务场景下,显得有点 阅读全文
posted @ 2018-01-03 14:13 Yaopengfei 阅读(11554) 评论(3) 推荐(10) 编辑
摘要:一. ThreadPool简介 ThreadPool简介:ThreadPool是一个线程池,当你需要开启n个线程时候,只需把这个指令抛给线程池,它将自动分配线程进行处理,它诞生于.Net 2.0时代。 ThreadPool与Thread的区别: ①:Thread每开启一个异步任务,就需要使用一个Th 阅读全文
posted @ 2018-01-02 17:06 Yaopengfei 阅读(3468) 评论(1) 推荐(2) 编辑