
多线程
文章平均质量分 83
ulark
这个作者很懒,什么都没留下…
展开
-
Net 异步处理温习
这几天,看WF本质论,里面提到了.net的异步处理。由于里面使用的是代码片段,所以有点看不懂。于是下定决心,温习一下.net中的异步处理。使用C#在.net开发已经有5年了,最初使用.net中的异步处理大约是在4年前。当时,只是为了实现要求的功能,没有详细研究。这也难怪看WF时会头晕(基础不牢的后果呀)。 首先,我们分析一下异步处理的环境 需要在当前线程中获取返回值 不需要在当原创 2010-01-15 09:47:00 · 530 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(一)前言 (转)
作为一个ASP.NET开发人员,在之前的开发经历中接触多线程编程的机会并不是很多,但是随着.NET 4.0的发布临近,我越来越感受到未来的1-2年中并行计算将会有很大的应用。于是决定通过写日志的方式来总结一下.NET 3.5下的多线程编程进而引入.NET 4.0提供的新的并行库以及新的并行编程模式和编程的思维方式。个人觉得在日常的编程中对于ASP.NET程序员来说使用多线程编程不是很多,其实我原创 2010-01-06 10:16:00 · 602 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(七)基于多线程的基本组件 (转)
在多线程应用中我们有一些很常见的需求,比如定时去做计划任务,或者是在执行一个长时间的任务,在执行这个任务的过程中能有进度显示(能想到要实现这个需求需要新开一个线程,避免阻塞UI的更新)。对于这些应用.NET提供了现成的组件。首先来看一下System.Threading的Timer组件,它提供了定时执行某个任务的方法:ThreadPool.SetMinThreads(2, 2);Thre原创 2010-01-07 13:10:00 · 565 阅读 · 0 评论 -
如何:对制造者线程和使用者线程进行同步(C# 编程指南)
下面的示例演示使用 lock 关键字以及 AutoResetEvent 和 ManualResetEvent 类对主线程和两个辅助线程进行线程同步。有关更多信息,请参见 lock 语句(C# 参考)。该示例创建两个辅助线程。一个线程生成元素并将它们存储在非线程安全的泛型队列中。有关更多信息,请参见 Queue(Of (T>)>)。另一个线程使用此队列中的项。另外,主线程定期显示队列的内容,原创 2010-01-05 18:25:00 · 509 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(二)线程基本知识
首先来看看如何创建线程:Console.WriteLine(Process.GetCurrentProcess().Threads.Count);Thread t1 = new Thread(() => { Thread.Sleep(1000); Thread t = Thread.CurrentThread; Console原创 2010-01-06 14:49:00 · 631 阅读 · 0 评论 -
线程同步方法
Monitor :提供同步访问对象的机制。 Monitor 类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。 使用 Monitor 锁定对原创 2010-01-06 15:39:00 · 536 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(四)线程同步基础下 (转)
回顾一下上次,我们讨论了lock/AutoResetEvent/ManualResetEvent以及Semaphore。这些用于线程同步的结构叫做同步基元。同步基元从类型上可以分为锁定/通知/联锁三种。lock显然锁定方式,而且是独占锁定,也就是在锁释放之前不能由其它线程获得。Semaphore也是一种锁定,只不过不是独占锁,可以指定多少个线程访问代码块。AutoResetEvent和Manual原创 2010-01-06 16:29:00 · 591 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上
首先我们创建一个Winform的应用程序,在上面添加一个多行文本框和一个按钮控件,按钮的事件如下:Thread.Sleep(1000);StringBuilder sb = new StringBuilder();for (int i = 0; i < 10000; i++) sb.Append("test");string s = sb.ToString();tex原创 2010-01-07 13:11:00 · 565 阅读 · 0 评论 -
线程同步(C# 编程指南)
以下各节描述了在多线程应用程序中可以用来同步资源访问的功能和类。在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。否则,在完全满足前一个请求之前,将无法处理每个新请求。然而,线程的异步特性意味着必须协调对资源(如文件句原创 2010-01-05 18:17:00 · 440 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(七)基于多线程的基本组件
在多线程应用中我们有一些很常见的需求,比如定时去做计划任务,或者是在执行一个长时间的任务,在执行这个任务的过程中能有进度显示(能想到要实现这个需求需要新开一个线程,避免阻塞UI的更新)。对于这些应用.NET提供了现成的组件。首先来看一下System.Threading的Timer组件,它提供了定时执行某个任务的方法:ThreadPool.SetMinThreads(2, 2);Thre原创 2010-01-06 10:02:00 · 429 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(三)线程同步基础上 (转)
其实,如果线程都是很独立的,不涉及到任何资源访问的,那么这些毫无干扰的线程不会产生什么问题。但是在实际应用中我们的线程总是涉及到资源访问的,而且往往涉及到共享资源的访问,那么就产生了线程同步的问题。一直觉得线程同步这个名词很奇怪,字面上看同步就是使得步调一致,线程同步是不是就是让线程步调一致的访问资源呢?事实上反了,线程同步恰巧是让线程不同时去访问资源而是去按照我们期望的顺序依次访问资源(是同步资原创 2010-01-06 15:21:00 · 572 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(五)线程池基础上 (转)
池(Pool)是一个很常见的提高性能的方式。比如线程池连接池等,之所以有这些池是因为线程和数据库连接的创建和关闭是一种比较昂贵的行为。对于这种昂贵的资源我们往往会考虑在一个池容器中放置一些资源,在用的时候去拿,在不够的时候添点,在用完就归还,这样就可以避免不断的创建资源和销毁资源。如果您做过相关实验的话可能会觉得不以为然,似乎开1000个线程也用不了几百毫秒。我们要这么想,对于一个高并发的环境原创 2010-01-07 12:42:00 · 557 阅读 · 0 评论 -
浅谈.NET下的多线程和并行计算(六)线程池基础下 (转)
这节我们按照线程池的核心思想来自定义一个简单的线程池:1) 池中使用的线程不少于一定数量,不多于一定数量2) 池中线程不够的时候创建,富裕的时候收回3) 任务排队,没有可用线程时,任务等待我们的目的只是实现这些“需求”,不去考虑性能(比如等待一段时间再去创建新的线程等策略)以及特殊的处理(异常),在实现这个需求的过程中我们也回顾了线程以及线程同步的基本概念。首先,把任务委托和任原创 2010-01-07 13:09:00 · 587 阅读 · 0 评论 -
多线程系列(八)——管程类(Monitor类)
前言:我第一次接触“线程”的概念时,觉得它深奥难懂,看了好多本书,花了很长时间才领悟到它的真谛。现在我就以一个初学者的心态,把我所理解的“多线程”描述给大家。这一次是系列文章,比较完整的展示与线程相关的基本概念。希望对初学者有所帮助。语言比较精炼,有些地方需要反复阅读。 目录(欲看前面的章节,请点击下面的链接)第21章 多 线 程 21.1 线程的概念21.2原创 2010-01-02 20:28:00 · 2008 阅读 · 0 评论 -
白话并发冲突与线程同步(1)
猴子抬头道:“我有一个梦,我想我飞起时,那天也让开路,我入海时,水也分成两边,众仙诸神,见我也称兄弟,无忧无虑,天下再无可拘我之物,再无可管我之人,再无我到不了之处,再无我做不成之事,再无我战不胜之物。” ——今何在原创 2010-01-02 20:18:00 · 460 阅读 · 0 评论 -
《软件开发性能优化系列》之多线程 (转)
1、 线程同步 线程同步是编写多线程程序需要首先考虑问题。C#为同步提供了 Monitor、Mutex、AutoResetEvent 和 ManualResetEvent 对象来分别包装 Win32 的临界区、互斥对象和事件对象这几种基础的同步机制。C#还提供了一个lock语句,方便使用,编译器会自动生成适当的 Monitor.Enter 和 Monitor.Exit 调用。原创 2010-01-27 10:19:00 · 562 阅读 · 0 评论 -
浅谈线程池(上):线程池的作用及CLR线程池(转)
2009-07-22 09:01 by Jeffrey Zhao, 7402 visits, 网摘, 收藏, 编辑 线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”原创 2009-12-25 17:53:00 · 798 阅读 · 0 评论 -
浅谈线程池(中):独立线程池的作用及IO线程池(转)
2009-07-24 09:21 by Jeffrey Zhao, 6120 visits, 网摘, 收藏, 编辑 在上一篇文章中,我们简单讨论了线程池的作用,以及CLR线程池的一些特性。不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式。独立线程池 上次我们讨论到,在一个.NET应用程序中会有一个CLR线程池,可以使用Th原创 2009-12-25 17:58:00 · 669 阅读 · 0 评论 -
浅谈线程池(下):相关试验及注意事项(转)
2009-10-20 00:06 by Jeffrey Zhao, 5491 visits, 网摘, 收藏, 编辑 三个月,整整三个月了,我忽然发现我还有三个月前的一个小系列的文章没有结束,我还欠一个试验!线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池。之前我们讨论了线程池的作用、独立线程池的存在意义,以及对CLR线程池和IO线程池进行了一定说明。不过这些说明可能有些“抽象原创 2009-12-25 18:00:00 · 747 阅读 · 0 评论 -
c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
最近由于在准备Collection对象培训的PPT,因为涉及到SyncRoot的属性的讲解,所以对怎样在多线程应用程序中同步资源访问做了个总结:对于引用类型和非线程安全的资源的同步处理,有四种相关处理:lock关键字,监视器(Monitor), 同步事件和等待句柄, mutex类。 Lock关键字 本人愚钝,在以前编程中遇到lock的问题总是使用lock(this)一锁了之,出问题后翻看M原创 2010-01-02 19:22:00 · 336 阅读 · 0 评论 -
利用Mutex实现应用程序的单实例运行
System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权。[MSDN]实现原理: 在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序。测试代码:class Test { /// /// 应用程序的主入口点。 ///原创 2010-01-02 19:16:00 · 398 阅读 · 0 评论 -
线程、同步与锁——Mutex想说爱你不容易
除了Lock()、Monitor之外,我们最长用的就是Mutex了,但是玩不好Mutex就总会造成死锁或者AbandonedMutexException(我就玩的不怎么好,在并发性访问测试的时候总是遇到关于Mutex的问题,各位线虫见笑了,不过还是把我遇到的一些问题和总结拿出来和大家分享,有误的地方还往指正。还是先举一个简单的例子,来说明一下这个东西: public class原创 2010-01-02 19:59:00 · 444 阅读 · 0 评论 -
白话并发冲突与线程同步(3)——Mutex、EventWaitHandle、AutoResetEvent 和 ManualResetEvent
不过这热气是从实在的火里发出来的呢,还是从他的爱情里发出来的呢,他完全不知道。他的一切光彩现在都没有了。这是因为他在旅途中失去了呢,还是悲愁的结果,谁也说不出来。 ——安徒生原创 2010-01-02 20:11:00 · 514 阅读 · 0 评论 -
线程同步lock and monitor
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ConsoleApplication1{ class Print { public void printNumbers() {原创 2010-01-02 20:20:00 · 461 阅读 · 0 评论 -
Lock和Monitor的区别
Lock 是 Monitor的简化版本,ILcallvirt ...Monitor.Enter(object)...leave.s....callvirt ...Monitor.Exit(object)Lock 只能对引用对象加锁Lock锁定区间内可以对锁定值修改而不发生运行时错误,通常也会采用此种修改方式。这种方式又有点类同于使用Monitor.Wait 取得资源,并对原创 2010-01-02 20:24:00 · 988 阅读 · 0 评论 -
白话并发冲突与线程同步(2)——Monitor、lock和死锁
竞赛暂时胜过它的目的,永远如此。对于要建立殖民地的殖民主义者,生活的意义就在于征服。士兵看不起移民,但是,征服的目的不就是要让移民定居下来吗?因此,在进步的狂热中,我们把人招来修铁路,建工厂,钻油井。但是,我们不是记得很清楚,我们进行的这些建设是服务人类的。……真理,对于一些人来说就是建造房子,而对于另一些人来说就是居住。原创 2010-01-02 20:16:00 · 544 阅读 · 0 评论 -
c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex (转)
最近由于在准备Collection对象培训的PPT,因为涉及到SyncRoot的属性的讲解,所以对怎样在多线程应用程序中同步资源访问做了个总结:对于引用类型和非线程安全的资源的同步处理,有四种相关处理:lock关键字,监视器(Monitor), 同步事件和等待句柄, mutex类。 Lock关键字 本人愚钝,在以前编程中遇到lock的问题总是使用lock(this)一锁了之,出问题后翻看MS转载 2010-05-21 10:19:00 · 603 阅读 · 0 评论