代码改变世界

随笔分类 -  多线程知识

一步一步学习C#多线程知识----2、ThreadPool(1)起始

2011-03-31 22:31 by RyanXiang, 2775 阅读, 收藏, 编辑
摘要: 写在前面:学习一种技术,我都要先搞清楚,1、我为什么要学习和使用它,它有哪些好处?2、它适用什么场合?3、如何使用它。这是我从我大学的导师那里学来的(在这里向我的导师致敬~~),我觉得很受用。之所以把如何使用放在最后,是因为在你没有搞清楚它的利弊和适用场合之前,如果上来就学习,即使学会了,在使用的过程中带来隐患。所以我会按照这个顺序来写,如果大家认为有道理的话,可以借鉴借鉴~~呵呵 1、为什么要使用ThreadPool?MSDN的官方说法是:许多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应用程序提 阅读全文

一步一步学习C#中的多线程 --- 1、初识线程(3)--前台线程和后台线程

2011-03-22 22:29 by RyanXiang, 3803 阅读, 收藏, 编辑
摘要: 1、前台线程和后台线程的基本概念MSDN上对前台线程和后台线程有如下描述:http://msdn.microsoft.com/zh-cn/library/h339syd0(VS.80).aspx 前台线程和后台线程的主要区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。 注意:通过Thread类创建的线程都是前台线程。线程池ThreadPool(后面将会介绍)中的线程都是后台线程。 在使用Thread创建前台线程时,可以通过IsBackground属性以确定该线程是前台线程还是后台 阅读全文

一步一步学习C#中的多线程 --- 1、初识线程(2)--给线程传递参数

2011-03-21 23:11 by RyanXiang, 3847 阅读, 收藏, 编辑
摘要: 给线程传递参数的三种方法 1、一种方式是使用ParameterizedThreadStart委托参数的Thread构造函数。参看如下代码: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; 6: us... 阅读全文

一步一步学习C#中的多线程 --- 1、初识线程(1)

2011-03-20 18:51 by RyanXiang, 1157 阅读, 收藏, 编辑
摘要: 仅是对自己在学习多线程知识时的点点滴滴进行记录。希望园子里的朋友多多指点。1、为什么要使用线程 ?CLR via C#给出了三个理由。1、可以使用线程将代码同其他代码隔离。2、可以使用线程来简化编码。3、可以用线程来实现并发执行。同样的理由还可以列出很多。使 UI 响应更快 利用多处理器系统 简化建模 执行异步或后台处理 关于为什么使用线程我不想多说。网上有很多文章都有介绍。同样不使用线程的理由很多,在这里我们没有必要去探讨这个问题。大家了解一下就可。用或不用可依据自己的应用的具体情况而定。2、使用C# 的Thread 类创建线程。下面代码是使用和创建线程的一个简单的例子。 1: using 阅读全文

一步一步学习多线程系列文章---开篇《Threading in C#》翻译

2010-12-16 14:00 by RyanXiang, 2538 阅读, 收藏, 编辑
摘要: 最近一段时间想系统的学习一下.Net多线程知识,一直没有找到合适的书籍。园子里的文章大多部分也不是从头讲起的,一般都很高深(可能我太菜),后来朋友推荐Joe Albahari的《Threading in C#》感觉不错,遂有把它翻译过来的冲动。欢迎大家批评指正,无它,仅仅为了让和我一样的菜鸟能够更多的了解.Net中的多线程技术。翻译过程中难免有误,请大家一起帮忙修改。这本书一共分为五部分,分别是 Part1 开始 Part2 同步基础 Part3 使用线程 Part4 线程高级特性 Part5 并发编程。先翻译第一部分看看效果,如果反应好,我会继续努力把其它部分也都翻译过来。第一部分多线程基本 阅读全文

Creating and Starting Threads

2010-12-16 13:10 by RyanXiang, 1118 阅读, 收藏, 编辑
摘要: Creating and Starting Threads(创建和运行线程) 通过多线程基本概念的介绍,我们知道线程是通过传入一个ThreadStart的委托给Thread类的构造函数创建的。下面是ThreadStart类的定义。 通过调用线程的Start方法使线程运行。线程将会一直运行到方法返回。下面是使用ThreadStart委托来创建一个线程 。 在这个例子中,线程t 调用Go()方法,几乎在同一时间主线程(main Thread)也在调用Go()方法。结果几乎同时打印出两个 “hello”。可以省略掉new ThreadStart(部分),下面这条语句与上例第5行代码是一样的—C#能 阅读全文

多线程基本概念介绍(Introduction and Concepts)

2010-12-16 13:09 by RyanXiang, 1682 阅读, 收藏, 编辑
摘要: 一、多线程基本概念介绍(Introduction and Concepts) C#支持通过多线程(multithreading),来并行的执行代码。每个线程都有一个独立的执行路径(execution path)能和其它的线程同时运行。被操作系统和CLR直接创建的,运行在独立的一个线程的C#客户端程序(Console, WPF, or Windows Forms)叫做主线程,而额外创建的其它线程就是多线程。 下面是一个简单的例子和输出。 所有的例子都引入以下的命名空间 : 下面是运行结果: 主线程创建一个新的线程t,用来运行WriteY()方法。同时主线程重复的打印字符 “x”: 一旦一个线程 阅读全文

Thread Pooling

2010-12-15 13:45 by RyanXiang, 1246 阅读, 收藏, 编辑
摘要: Thread Pooling(线程池) 无论你在什么时候创建一个线程,CPU都会花费几百毫秒来做一些准备,例如:分配私有变量的栈空间。一个线程在默认的情况下大概会花费1MB的内存。 线程池通过共享和循环使用线程,在一定程度上让这些性能损耗降到最小。这对于采取“分治”策略在多核CPU上并发执计算密集型程序是非常有效的一种方式。 线程池保证并行运行的线程维持在一个特定的范围,因为过多的活动线程将会耗尽系统的CPU资源和内存资源,一旦系统中活动的线程数超过线程池允许的最大数,线程池将把后来的线程放到工作队列中,只有当线程池中某个线程执行结束的时候,该线程才会从工作队列中启动。这种方式让并发应用成为可 阅读全文