tnblog
首页

多线程、Lock锁、数据库实现队列

30人阅读 2019/3/13 8:56 评论:1 收藏
分类: C#


        队列其元素以先进先出(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锁。多个线程的请求必须先拿到锁,才能进行下一步的操作,在操作中,拿到锁的线程先进行执行,其他线程在锁外等待拿到所的线程结束释放锁,锁外的线程再去获取锁,进行下一步操作。


请先登录

{{item.title}}

{{item.content}}
每天学一学总会有用武之地
博主搜索
文章类别
最新文章
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}