随笔分类 -  C#线程

学习分享
摘要:C#线程基础在前几篇博文中都介绍了,现在最后来挖掘一下线程池的管理机制,也算为这个线程基础做个完结。 我们现在都知道了,线程池线程分为工作者线程和I/O线程,他们是怎么管理的? 对于Microsoft设计的CLR线程池,线程池会随着CLR的每个版本的发布,都会发生变化,很难去挖掘,这里的提议是: 最好将线程看成一个黑盒。不要拿单个应用程序去衡量这个黑盒的性能,因为它对任何一个应用程序来说都无法做到完美。 相反,它是一种常规用途的线程调度技术,面向大量应用程序;它对某些应用程序的效果要好于其他应用程序。目前,它的工作情况非常理想,这里建议你信任它,因为你很难高出一个比CLR自带的那个更好... 阅读全文
posted @ 2012-12-13 09:55 阅读(12330) 评论(8) 推荐(11) 编辑
摘要:在上篇最后一个例子之后,我们发现了怎么去使用线程池,调用ThreadPool的QueueUserWorkItem方法来发起一次异步的、计算限制的操作,例子很简单,不是吗? 然而,在今天这篇博客中,我们要知道的是,QueueUserWorkItem这个技术存在许多限制。其中最大的问题是没有一个内建的机制让你知道操作在什么时候完成,也没有一个机制在操作完成是获得一个返回值,这些问题使得我们都不敢启用这个技术。 Microsoft为了克服这些限制(同时解决其他一些问题),引入了任务(tasks)的概念。顺带说一下我们得通过System.Threading.Tasks命名空间来使用它们。 现... 阅读全文
posted @ 2012-12-11 09:36 阅读(86199) 评论(15) 推荐(35) 编辑
摘要:线程的创建和销毁都要耗费大量的时间,有什么更好的办法?用线程池!太多的线程浪费内存资源,有什么更好的办法?用线程池!太多线程有损性能,有什么更好的办法?用线程池!(⊙_⊙)?线程池是什么?继前三篇线程基础之后,我们要来学学线程池了。注意,这些信息相当有用!为了设计和实现可伸缩的、可响应的和可靠的应用程序或组建,线程池是你必须采用的核心技术。线程池是CLR的,线程池自动为你管理线程的创建和销毁,线程池创建的一组线程将为各种任务而重用,极大提高了使用线程的成本,这也就意味着,你的应用程序其实只需要几个线程即可完成全部工作。大概的讲了一下,来看看线程池的细节: 大家可以想象一下:一个应用程序就好比. 阅读全文
posted @ 2012-12-04 10:00 阅读(9515) 评论(11) 推荐(8) 编辑
摘要:Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题。我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法。为什么这么说?我们对系统发出的命令,获取信息等操作,Windows为什么能这么快作出反应吗?这仅仅是上下文切换那30毫秒的功劳吗?操作系统能依照人的操作,处理当前用户最迫切的请求,并在最短时间内给出反应,这些原因我们应该知道。 有人会提,这是线程的功劳,对。这是线程的功劳,你在操作的时候,都是线程在处理你的请求,现在来了解下线程的属性吧? 打开开始菜单,win7直接在搜索框中输入spy,然后会.. 阅读全文
posted @ 2012-12-03 09:20 阅读(8774) 评论(16) 推荐(18) 编辑
摘要:我们都知道,在这个行业,追求的就是用最少的时间学最多的知识,这是我写这个系列最想达到的目标,在最快的时间内,帮助更多的人学习更多的线程知识。 前一篇,讲述了线程基础,给大家铺垫了一个基础,这一篇着重介绍线程的作用及其工作方式,顺便小试牛刀一把。 现在我想提出,最直接的问题是: 为什么要使用线程? 为什么要使用线程?答案只有三点(欢迎补充^_^):使用线程可以将代码同其他代码隔离。这将提高应用程序的可靠性,这不仅仅是应用程序所需要的,更是Windows引入线程的真正原因。使用线程可以简化编程。这个答案有利有弊,需要从两方面考虑:第一点:使用线程的同时也就意味着会付出一些资源作为代价,对... 阅读全文
posted @ 2012-11-30 08:51 阅读(5415) 评论(12) 推荐(10) 编辑
摘要:线程线程,进程进程,到底什么是线程,什么是熟练多线程编程?今天来和大家一起讨论讨论线程基础,让大家知道线程的基本构造。说线程之前,先要了解下进程,这个可不能不知道。什么是进程? Microsoft设计操作系统内核时,他们决定在一个进程中运行应用程序的每一个实例,进程也不过就是个应用程序实例要使用资源的集合。(见过烤玉米,烤甘蔗的没?如下图:) 一个进程就好比一个烤筒,一个进程与其他进程互不干涉。操作系统为他们设立了一个虚拟地址空间,确保一个进程使用的代码和数据无法由另一个进程访问。这就保证了一个应用程序的健壮性。 现在问题又来了,当一个进程进入无限循环了会怎么样? 也就是程序没反应了,无限.. 阅读全文
posted @ 2012-11-26 09:29 阅读(8756) 评论(11) 推荐(30) 编辑