tnblog
首页
视频
资源
登录

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

5319人阅读 2019/3/13 8:56 总访问:21816 评论:1 收藏: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锁。多个线程的请求必须先拿到锁,才能进行下一步的操作,在操作中,拿到锁的线程先进行执行,其他线程在锁外等待拿到所的线程结束释放锁,锁外的线程再去获取锁,进行下一步操作。


评价

剑轩

2019/3/13 9:10:13

赞!

C 使用CancellationTokenSource取消线程

有时间我们在使用多线程的时候,需要取消线程的执行,可以使用CancellationTokenSource来取消对Task开辟多线程的取消如下:...

Linux axel 线程下载

Linux axel 多线程下载[TOC] 下载wget http://www.ha97.com/code/axel-2.4.tar.gz # 二选一 wget https://files.cnblogs...

core 异步线程

前言同步异步编程同步编程是对于单线程来说的,就像我们编写的控制台程序,以main方法为入口,顺序执行我们编写的代码。异...

JAVA线程系列--ForkJoinPool详解

https://blog.csdn.net/niyuelin1990/article/details/78658251https://blog.csdn.net/dhaibo1986/article/details/1087373...

.NET 6 线程

参考这篇文章:.NET 6 多线程的几种打开方式https://mp.weixin.qq.com/s?__biz=MzA3MDMyMzk0NA==&amp;mid=2650832187&amp;...

.net线程 并行执行Parallel,列表遍历,循环下的并行执行

Parallel允许线程并行执行。同时支持最大线程执行数量设置,可以设置最大并发数量。 [TOC]基础用法static void Main(strin...

c 的运用

锁的一般分类:乐观锁、悲观锁、共享锁、排它锁、互斥锁锁的对象为什么要是私有的只读的因为防止被修改C#中Monitor和Lock以...

redis分布式

public static RedisClient Redis;static CommonService(){ Redis = new RedisClient();}public static dynamic RedisLock...

SVN与TortoiseSVN实战:文件加详解

本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧加锁与解锁的操作对于项目中的二进制文件,如图片、声音、动态库等不可...

SVN更新或提交时报错:工作副本 “..........” 已经定”的解决办法

出现这种错可能是因为最近改变太多或者从未更新一直是提交造成的原因,只需要右键”清理”(clear up)就可以了原文地址:htt...

ABP lock的使用

///&lt;summary&gt; ///位置与轨迹应用服务层 ///&lt;/summary&gt; publicclassPositionAndTrajectory:FinanceAppServic...

.Net ReaderWriterLockSlim

.Net ReaderWriterLockSlim 锁[TOC] 读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,...

.Net6 asyncEx 异步

.Net6 AsyncEx[TOC] 简单来讲就是可以通过异步方式实现锁。安装&lt;PackageReference Include=&quot;Nito.AsyncEx&quot; V...

Dapr 分布式

Dapr 分布式锁[TOC] 分布式锁简介简单来讲:两个人做一件事情,同一时间内,我做的时候你不可以做,除非我没有在规定的时...

net core 使用redis 分布式

在电商项目中,必定会与订单打交道。订单中必定会涉及到扣库存,但是在高并发项目中,库存余量不能及时刷新,导致库存扣除...
每天学一学总会有用武之地
排名
68
文章
6
粉丝
2
评论
1
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术