队列其元素以先进先出(Firstin,Firstout,FIFO)的方式来处理的集合。先放入队列中的元素会先读取。队列使用System.Collections.Generic命名空间中的泛型类Queue<T>实现。
队列的成员
Count:Count属性返回队列中元素个数。
Enqueue:Enqueue()方法在队列一端添加一个元素。
Dequeue:Dequeue()方法在队列的头部读取和删除元素。如果在调用Dequeue()方法时,队列中不再有元素,就抛出一个InvalidOperationException类型的异常。
Peek:Peek()方法从队列的头部读取一个元素,但不删除它。
TrimExcess:TrimExcess()方法重新设置队列的容量。Dequeue()方法从队列中删除元素,但它不会重新设置队列的容量。要从队列的头部去除空元素,应使用TrimExcess()方法。
Clear:Clear()方法从队列中移除所有的元素。
ToArray:ToArray()复制队列到一个新的数组中。
文件队列
创建一张队列表,将要执行的任务放入表中。具体实现分为两个部分,第一部分:往队列表中添加任务,第二部分:开启一个线程不断的去读取队列表中的数据,执行队列中的任务,执行一个删除一个任务。优点:后期维护方便,不占内存。缺点:频繁操作数据库,有几率引起锁表(概率不是很大一般不用担心)
多线程
多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
多线程需要协调和管理,所以需要CPU时间跟踪线程;
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug;
LOCK锁
在控制多个线程对一个数据进行修改时,我们引入了lock锁。多个线程的请求必须先拿到锁,才能进行下一步的操作,在操作中,拿到锁的线程先进行执行,其他线程在锁外等待拿到所的线程结束释放锁,锁外的线程再去获取锁,进行下一步操作。