上一页 1 2 3 4 5 6 7 8 ··· 12 下一页
摘要: 在移动交通流调查项目的一个算法分析程序中,碰到一个业务问题:用户采集上传的基站定位数据需要进行分析预处理,方案是先按预定格式解析文件并从中 提取出成百上千个基站定位数据记录,并合并相同的基站点,根据获取到的基站位置信息作为参数,去请求google 基站定位 api,从而得到对应的基站定位经纬度等信息,接下来再加上华工的算法分析。 在执行华工算法分析逻辑之前,调用谷歌api这一步必需全部完成;网络请求是个耗时的过程,故对每一个请求开启单独的线程(同时请求可能数百个,这里通过Semaphore信号量来控制每次发出请求的最大数,该部分的讨论不再本话题之类)。 问题出来了,那么如何知道所有的网络请求全 阅读全文
posted @ 2013-01-10 11:45 怡馨 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 摘要:Thread.Sleep(0) MSDN上的解释是挂起此线程能使其他等待线程执行。这样的解释容易导致误解,我们可以这样理解,其实是让当前线程挂起,使得其他线程可以和当前线程再次的抢占Cpu资源。线程这一概念,可以理解成进程中的一个小单元。这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元。由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线程交替执行。Thread.Sleep() 本身的含义是当前线程挂起一定时间。Thread.Sleep(0) MSDN上的解释是挂起此线程能使其他等待线程执行。这样的解释容易导致误解,我们可以这样理解,其 阅读全文
posted @ 2013-01-10 11:44 怡馨 阅读(307) 评论(0) 推荐(0) 编辑
摘要: ManualResetEvent 用于线程同步,通知一个或多个线程某事件已经发生。通常用于一个线程执行的任务必须在其他线程的任务执行之前完成。ManualResetEvent状态分为两种:终止状态和非终止状态。当某一任务完成时,将ManualResetEvent设置为终止状态,这样其他等待的线程(一个或多个)将开始执行自己的任务。注意:一旦它被终止,它将保持终止状态,直到它被手动重置。代码示例:代码class Program { staticvoid Main(string[] args) { Caclultae calc =new Ca... 阅读全文
posted @ 2013-01-10 11:42 怡馨 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 1.线程池,顾名思义,就是装着若干个线程的池子。2.出现理由 可以更为有效的使用线程。 如何理解这个“有效”? (1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。(2)使用线程时,线程之间的切换也会浪费大量资源。而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。3.线程池工作原理 如上图所示,线程池中维护着若干空闲进程,空闲线程的个数默认为每个处理器25个,最小值是系统的处理器的个数。 当有任务时,不需要程序员另外启动线程,而是通过ThreadPool.QueueUserWorkItem(). 阅读全文
posted @ 2013-01-10 11:42 怡馨 阅读(197) 评论(0) 推荐(0) 编辑
摘要: AutoResetEvent也是一个同步对象,它用于对资源的独占访问。当AutoResetEvent处于终止状态时,如果存在等待的线程,则在该线程执行后,AutoResetEvent变量将自动变为非终止状态。代码示例:代码class Program { staticvoid Main(string[] args) { Caclultae calc =new Caclultae(); Console.WriteLine("Result={0}",calc.result(234).ToString()); ... 阅读全文
posted @ 2013-01-10 11:41 怡馨 阅读(244) 评论(1) 推荐(0) 编辑
摘要: 摘要:WaitHandle类的用处可以调用它的方法,来等待若干个信号发生,即可以调节多个线程之间的同步在讨论WaitHandle类之前 我们先看一张MSDN上给的继承关系图: 红色框指出的部分,就是这篇文章要讨论的WaitHandle类,绿色框指出的部分就是本文提到的一些异步对象。可以看到,异步对象的父类就是WaitHandle异步对象如AutoResetEvent和ManualResetEvent定义了一种信号机制,这种机制用来表明是访问共享资源还是释放共享资源。1. WaitHanle类MSDN上的定义 封装了一些对象,这些对象等待着独占访问共享资源(Encapsulates operat 阅读全文
posted @ 2013-01-10 11:40 怡馨 阅读(575) 评论(0) 推荐(0) 编辑
摘要: Thread.Join()方法,顾名思义,在一个线程中加入一些东西。MSDN上解释其作用为:阻塞 “调用线程” 直到某个线程结束。这个翻译过来的解释有点晦涩。举个例子如下:static void Main(){ Thread t=new Thread(new ThreadStart(ThreadMethod)); t.Start();t.Join(); Console.WriteLine("I am Main Thread"); Console.Read();}void ThreadMethod(){ ...}从上面的代码中,我们可以看到存在两个线程:主线程和线程t回到Jo 阅读全文
posted @ 2013-01-10 11:39 怡馨 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 这里介绍C# lock关键字它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。C#语言有很多值得学习的地方,这里我们主要介绍C# lock关键字,包括介绍Monitor 类锁定一个对象等方面。C#提供了一个lock关键字,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,C# lock关键字定义如下:lock(expression) statement_blockexpression代表你希望跟踪的对象,通常是对象引用。 ... 阅读全文
posted @ 2013-01-10 11:37 怡馨 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 摘要:本文介绍C#多线程中的互斥对象Mutex和用它实现线程同步的方法。如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上 车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放 了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期 阅读全文
posted @ 2013-01-10 11:36 怡馨 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 摘要:本文介绍C#中定时器(Timer)的使用和相关知识。Timer类:设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。初始化一个Timer对象:Timer timer = new Timer(timerDelegate, s,1000, 1000);// 第一个参数:指定了TimerCallback 委托,表示要执行的方法;// 第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用;// 第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器;// 第四个参数:定时器的时间间隔——计时开始以 阅读全文
posted @ 2013-01-10 11:35 怡馨 阅读(223) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 12 下一页