代码改变世界

C# 线程手册 第四章 线程设计原则 对等线程模型

2012-03-12 21:22 by DanielWise, 1234 阅读, 1 推荐, 收藏, 编辑
摘要:我们将要描述的下一个线程模型是对等线程模型。在这个线程模型中,每个线程都会从合适的源接收它自己的输入并对应地处理。这个模型在图4中做了描述。 图 4 在上面的图片中,UI 线程将根据键盘和鼠标的输入进行工作。工作线程A 将监听一个特定的套接字并处理来自套接字的输入,工作线程B将以同样的方式等待一个事件并在事件发生后对应处理。在这个模型中,所有线程都并发执行,不会阻塞或者等待其他线... 阅读全文

C# 线程手册 第二章 .NET 中的线程系列

2012-03-07 07:03 by DanielWise, 3594 阅读, 4 推荐, 收藏, 编辑
摘要:[第1篇] .NET 中的线程 在第一章我们描述了什么是线程。我们讲述了很多人可能已经很熟悉的背景知识。知道了线程的哪部分最重要。在这一章,你将看到如何实现一些基本的线程;然而了解何时使用线程相对知道基本实现来说更重要一些。[第2篇] 创建一个线程 这一部分通过两个例子让大家了解如何创建一个线程、应用程序域,了解线程属性和线程优先级。[第3篇] 时钟和回调 由于线程与应用程序代码中的其他代码相比是无序运行的,我们不能确定在一个线程中影响一个特定共享资源的动作会在另外一个线程访问同样共享资源之前完成。有很多方法处理这些问题,但是这里我们将介绍一种简单方式;使用定时器/时钟。通过定时器,我们可以确 阅读全文

C# 线程手册 第一章 线程定义 中断和局部线程存储

2012-03-06 20:29 by DanielWise, 2339 阅读, 1 推荐, 收藏, 编辑
摘要:中断和局部线程存储是如何工作的? 当一个线程用完了分配给它的时间片以后,它不会停止而是再次排队等待。每个处理器在同一时间只能处理一个线程,所以当前线程不得不离开(被从处理器中移出)。然而,在线程跳出执行之前,它得将离开前的状态信息保存下来以便于再次执行。如果你的记性不错,这个功能就称作线程本地存储(TLS).一个线程的本地线程存储包含寄存器,堆栈指针,调度信息,内存中的地址空间以及其他正在使用的... 阅读全文

C# 线程手册 第一章 线程定义系列

2012-03-06 20:27 by DanielWise, 4894 阅读, 4 推荐, 收藏, 编辑
摘要:《C# Threading Handbook》 系列翻译文章的分类汇总陆续贴出,欢迎大家持续关注~[第1篇] 线程定义 之一多线程是一种将一个应用程序切分成“线程”并按步骤运行程序的其他部分的平台开发能力。在大多数编程语言中,你会有一个Main()方法,每行代码都会顺序执行,只有当前面的一行代码执行完,后面的代码才会执行。线程是操作系统常规多任务能力的一个组成部分并允许应用程序的一部分与其他对象的分别执行的一个特定对象,所以不在应用程序通用执行顺序范畴内。本篇主要介绍什么是线程,多任务。[第2篇] 线程定义 之二进程也有一个使用计算机处理器的执行顺序。这个执行顺序就是线程。这个线程由CPU上正 阅读全文

C# 线程手册 第四章 线程设计原则 线程及线程间关系

2012-03-05 21:05 by DanielWise, 2055 阅读, 3 推荐, 收藏, 编辑
摘要:一个多线程应用程序中的线程彼此间可能关联也可能不关联。例如,在每个程序中都有一个用来生成其他子线程的主线程,所以主线程就成了所有其他线程的控制器。在一个多线程应用程序中有三种常用方法来定义线程间的关系: 1. 主线程和工作线程模型 2. 对等线程模型 3. 管道线程模型 我们将详细讨论每一个模型,借助一些代码来使你能够知道如何在自己的程序中实现它们。主线程和工作线程模型这是最常见的线程模型也是到目前为止本书一直使用的模型。如图3表示:图 3 在主线程和工作线程模型中,主线程接收所有的输入并把输入参数传递给其他线程以便于执行一些特定的任务。主线程可以等待/不等待工作线程完成。在这个模型中,工作. 阅读全文

C# 线程手册 第四章 线程设计原则 MTA 线程模型

2012-03-04 21:53 by DanielWise, 3323 阅读, 2 推荐, 收藏, 编辑
摘要:一个STA和一个MTA线程单元最大的不同是再同一个线程单元中可以有多个线程运行并可以使用所有共享数据。如图2所示。图 2由于MTA线程模型支持多线程并发执行,所以处理多线程间全局数据的同步问题就变成了调用方的事情了。关于同步问题我们已经在上一章描述过。确定线程模型可以使用Thread 类中的ApartmentState 属性来设置一个线程的线程模型。ApartmentState 枚举定义了.NET 支持的线程模型类型。正如我们之前学到的,你应该仅当你访问一个STA线程的COM组件时你才应该把线程标记为STA。否则,你的线程模型默认都是MTA。设计多线程应用程序一个多线程程序有多于两个线程,它可 阅读全文

C# 线程手册 第四章 线程设计原则

2012-02-20 20:23 by DanielWise, 3452 阅读, 3 推荐, 收藏, 编辑
摘要:概述 大多数可扩展系统是具有高度并发性的,这意味着可能存在多个针对同一个对象的并发请求。实现一个既具有高并发性又具有线程安全性的代码是一个很大的挑战,因为这意味着当多个线程访问共享数据时,不会发生数据崩溃或者不一致的情况。 如果我们借助一个正式的线程模型使用多线程技术,我们可以写出运行在一个并发情景中的具有高度扩展性的代码。在之前章节,我们学习了何时应该使用多线程以及关于多线程的所有细节,包括线程陷阱。在本章,我们将学习.NET 支持的所有线程模型以及如何充分利用这些线程模型的优势,同时要学习在.NET 上改进一些模型来帮助我们设计代码。 所有的.NET 应用程序默认都是多线程的(VB 6.0 阅读全文

C# 线程手册 第三章 使用线程 实现一个数据库连接池(实战篇)

2012-02-18 16:43 by DanielWise, 10288 阅读, 3 推荐, 收藏, 编辑
摘要:在企业级软件开发过程中,为了改善应用程序的性能需要通常使用对象池来控制对象的实例化。例如,在我们每次需要连接一个数据库时都需要创建一个数据库连接,而数据库连接是非常昂贵的对象。所以,为了节省为每次数据库调用都实例化一个数据库连接的资源,我们可以缓存并重用一些创建好的数据库连接对象并通过节省为每次数据库调用都创建一个数据库连接对象的时间和资源来大幅度提高程序性能。 对象池与图书馆很像。图书馆里维护很多书籍。当对某本书的需求增加时,图书馆就会买更多书,否则的话读者们就会一直使用同一本书。在对象池中,首先我们检查对象是否已经被创建且被放到池中,如果已经被放到池中,我们就会得到对象池中缓存的对象;如. 阅读全文

C# 线程手册 第三章 使用线程 创建线程安全的包装器(实战篇)

2012-02-15 22:15 by DanielWise, 3162 阅读, 4 推荐, 收藏, 编辑
摘要:在这部分我们将看两个大的例子。首先,我们将看一下创建线程安全的包装器的例子,然后看一下数据库连接池例子。实现自己的线程安全包装器实现自己的线程安全包装器主要基于你可能不想让类库中的每个类都是线程安全的,而使用同步也会带来性能问题的事实。你可能想要为开发人员提供一个是否使用一个同步类的选择。由于开发人员既不想发生死锁也不想发生由于在一个单线程环境中使用线程安全类而导致的性能问题,他们可能更倾向于为类库中相同的类使用内建同步包装器而不是为每个类分别实现一个。System.Collections命名空间中的ArrayList和Hashtable集合类早就有了这个特性。你可以决定在初始化一个Hasht 阅读全文

C# 线程手册 第三章 使用线程 小心死锁

2012-02-11 22:14 by DanielWise, 6462 阅读, 3 推荐, 收藏, 编辑
摘要:尽管使用线程同步对线程安全来说是必须的,但是如果没有用好的话就可能导致死锁。因此,理解什么是死锁并知道如何避免死锁是非常重要的。当两个或两个以上的线程等待两个或多于两个锁被释放然后程序中的逻辑导致锁永远都不会被释放时死锁就发生了。图3描述了一个典型的死锁场景。图3在上图中,线程1获得通过进入一个对象的关键区域获得这个对象的锁L1。在关键部分中线程1想要获取锁L2。线程2获得锁L2同时还想获得锁L1。所以,现在线程1无法获得锁L2而线程2无法获得锁L1,因为这两个线程彼此拥有对方需要的锁而又不会释放它们。结果是两个线程都进入无限等待或者死锁。阻止潜在的死锁发生的最好的方式是避免在同一时间获取多个 阅读全文
上一页 1 2 3 4 5 6 7 8 ··· 26 下一页