上一页 1 2 3 4 5 6 7 8 ··· 13 下一页
摘要: .NET多线程同步方法详解(一):自由锁(InterLocked).NET多线程同步方法详解(二):互斥锁(lock)NET多线程同步方法详解(三):读写锁(ReadWriteLock).NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)NET多线程同步方法详解(五):信号量(Semaphore)NET多线程同步方法详解(六):事件(ManualResetEvent/AutoResetEvent).NET多线程同步方法详解(七):线程池(Thread Pooling) 阅读全文
posted @ 2014-02-19 21:21 gejianhua 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 来源:http://blog.csdn.net/wxwzy738/article/details/8516253程序是很简易的。然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的、难以发现的错误。 在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程。背景 中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操作。线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序。虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结果。你最好还是牢记以下的几点告诫。 首先,. 阅读全文
posted @ 2014-02-19 13:27 gejianhua 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 第一个是通过手动的方法来计算CPU使用比例:CPU使用比例 = 在间隔时间内进程的CPU使用时间 除以 计算机逻辑CPU数量。使用Process类的UserProcessorTime和PrivilegedProcessorTime属性可以返回当前进程所耗费CPU的用户和内核时间。Process.TotalProcessorTime则代表两者之和。它们都返回TimeSpan结构体对象。代码://+ using System.Diagnostics//+ using System.ThreadingstaticvoidUsingProcess(stringpname){using(varpro=P 阅读全文
posted @ 2014-02-16 17:06 gejianhua 阅读(10263) 评论(4) 推荐(0) 编辑
摘要: 当前.NET Framework(.NET 4.0)的Process仅提供进程的内存工作集的获取(通过WorkingSet64属性),而没有提供对私有工作集的获取。注意在Windows Vista之后,Windows任务管理器的进程内存一项默认是显示进程的私有工作集的,因此这一性能数据还是很重要的。通过性能计数器Process类的WorkingSet – Private可以获取进程的私有工作集。当然通过WorkingSet属性也可以获取工作集。另外Process类和性能计数器都有Peak WorkingSet可以获取工作集的高峰值。比如,通过Process.WorkingSet64和性能计数器 阅读全文
posted @ 2014-02-16 17:05 gejianhua 阅读(3092) 评论(2) 推荐(0) 编辑
摘要: AutoResetEvent允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。线程通过调用AutoResetEvent上的WaitOne来等待信号。如果AutoResetEvent处于非终止状态,则该线程阻塞,并等待当前控制资源的线程通过调用Set发出资源可用的信号。调用Set向AutoResetEvent发信号以释放等待线程。AutoResetEvent将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。可以通过将一个布尔值传递给构造函数来控制AutoResetEvent的初始状态,如果初始状态为终止 阅读全文
posted @ 2014-02-14 23:19 gejianhua 阅读(1381) 评论(0) 推荐(0) 编辑
摘要: 先看一段代码:publicclassWaitHandlerExample {publicstaticAutoResetEvent waitHandler;publicstaticManualResetEvent manualWaitHandler;publicstaticvoidThreadPoolMain() {waitHandler =newAutoResetEvent(false);manualWaitHandler =newManualResetEvent(false);// Queue the task.ThreadPool.QueueUserWorkItem(newWaitCall 阅读全文
posted @ 2014-02-14 23:18 gejianhua 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 摘要深度探索Microsoft .NET提供的线程池,揭示什么情况下你需要用线程池以及.NET框架下的线程池是如何实现的,并告诉你如何去使用线程池。内容介绍.NET中的线程池线程池中执行的函数使用定时器同步对象的执行异步I/O操作监视线程池死锁有关安全性结束介绍如果你有在任何编程语言下的多线程编程经验的话,你肯定已经非常熟悉一些典型的范例。通常,多线程编程与基于用户界面的应用联系在一起,它们需要在不影响终端用户的情况下,执行一些耗时的操作。取出任何一本参考书,打开有关线程这一章:你能找到一个能在你的用户界面中并行执行数学运算的多线程示例吗?我的目的不是让你扔掉你的书,不要这样做!多线程编程技术 阅读全文
posted @ 2014-02-13 13:59 gejianhua 阅读(799) 评论(0) 推荐(0) 编辑
摘要: 之前写过两篇关于线程同步问题的文章(一,二),这篇中将对相关话题进行总结,本文中也对.NET 4.0中新增的一些同步机制进行了介绍。 首先需要说明的是为什么需要线程功能同步。MSDN中有这样一段话很好的解释了这个问题:当多个线程可以调用单个对象的属性和方法时,对这些调用进行同步处理是非常重要的。否则,一个线程可能会中断另一个线程正在执行的任务,使该对象处于一种无效状态。也就说在默认无同步的情况下,任何线程都可以随时访问任何方法或字段,但一次只能有一个线程访问这些对象。另外,MSDN中也给出定义,成员不受多线程调用中断影响的类即线程安全类。CLI提供了几种可用来同步对实例和静态成员的访问的策略. 阅读全文
posted @ 2014-02-11 14:39 gejianhua 阅读(3764) 评论(0) 推荐(0) 编辑
摘要: 池(Pool)是一个很常见的提高性能的方式。比如线程池连接池等,之所以有这些池是因 为线程和数据库连接的创建和关闭是一种比较昂贵的行为。对于这种昂贵的资源我们往往会考虑在一个池容器中放置一些资源,在用的时候去拿,在不够的时候添 点,在用完就归还,这样就可以避免不断的创建资源和销毁资源。如果您做过相关实验的话可能会觉得不以为然,似乎开1000个线程也用不了几百毫秒。我们要这么想,对于一个高并发的环境来说,每一秒假设有100 个请求,每个请求需要使用(开和关)10个线程,也就是一秒需要处理1000个线程的开和关,每个线程独立堆栈1M,可以想象在这一秒中内存分配和回收是 多么夸张,这个开销不能说不昂 阅读全文
posted @ 2014-01-28 15:36 gejianhua 阅读(497) 评论(0) 推荐(0) 编辑
摘要: C# 温故而知新: 线程篇(一)C# 温故而知新: 线程篇(二)C# 温故而知新:线程篇(三)C# 温故而知新: 线程篇(四) 阅读全文
posted @ 2014-01-28 15:31 gejianhua 阅读(344) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 13 下一页