任务并行库

1.异步和多线程的区别?
没什么太大区别。异步是目的,使用多线程实现。想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因为写日志只是记录和应用提供的功能无关),可以单独开一个线程来执行执行写日志的操作。

接上文 多线程编程学习笔记——基础

2.什么是多线程?
同时执行多个任务。为什么你的程序不能同时执行多个任务?因为整个程序就是一个主线程,而一个线程同时只能从上至下顺序完成任务。比如控制台应用,你在一个while(true)的代码里Console.WriteLine(1)。拿这个程序就会在while(true)的代码里走不出来,可是如果你开启一个其它线程,在另一个线程里while(true)并且
Console.WriteLine(2),那控制台就可以同时打印1和2

接上文 多线程编程学习笔记——基础

3.thead和theadpool
C#中对于线程的开启可以使用thead这个类来开启。theadpool是一个线程池,对于需要频发开启线程的操作是一个优化。                                  

接上文 多线程编程学习笔记——基础

4.thead和theadpool

接上文多线程编程学习笔记——线程同步

C#中对于线程的开启可以使用thead这个类来开启。theadpool是一个线程池,对于需要频发开启线程的操作是一个优化。thead和theadpool并不怎么容易控制所以不建议使用它们开启线程,task一般来讲是用来替代theadpool的,毕竟theadpool坑太多。

接上文 多线程编程学习笔记——线程同步

至C#4.0起,线程建议使用task。task会根据你线程的任务,来决定内部是使用thead还是theadpool来完成你指定的任务。这是它强大的地方。

接上文 多线程编程学习笔记——线程同步

5.数据安全问题
数据安全问题。也有人称之为重入和集合安全问题。这是因为在多线程编程下,多个线程同时操作一个数据,会导致数据改变的莫名其妙不符合你的需要,一般有三个方法,我觉得最简单的就是使用lock锁住这个数据,不让其它线程访问只让当前线程访问。

接上文
多线程编程学习笔记——线程池

接上文 多线程编程学习笔记——线程池

接上文多线程编程学习笔记——线程池

前面我们学习了什么是线程,线程之间的同步,使用线程池。使用线程池可以减少我们大量短时间操作的并行线程所用的操作系统资源。

在net framework
4.0中微软又提供了一个新的异步操作的功能,叫做任务并行库。任务并行库的核心是任务。一个任务代表了一个异步操作,譔操作可以通过多种方式运行,可以使用或不使用独立的线程。

一个任务可以通过多种方式和其他任务组合起来使用。例如,可以同时开启多个任务,等待所有任务完成,再起一个任务进行操作。一个任务可以有多个其他任务组成,这些任务也可以依次拥有自己的子任务。

C#5.0及之后的版本都已经内置了对TPL的支持,允许我们使用await与async关键字进行任务执行。

以下示例,我们使用.Net Framework
4.5之后版本。

一、 创建任务

下面的示例,我们使用task构造函数创建了两个任务。我们传入了一个lambda表达式做为操作任务。然后使用start启动任务。

发表评论

电子邮件地址不会被公开。 必填项已用*标注