请问关于c的具体应用场景有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1220个文字,预计阅读时间需要5分钟。
入队(EnQueue)+ 出队(TryDequeue)+ 是否为空(IsEmpty)+ 获取队列元素数量(Count)。
一、ConcurrentQueue内部结构:
1.实现原理+众所周知,在普通的非线程安全队列中,有几种实现方式:
1. 使用数组实现。入队(EnQueue) 、出队(TryDequeue) 、是否为空(IsEmpty)、获取队列内元素数量(Count)。
一、ConcurrentQueue内部结构:
1.实现原理
众所周知,在普通的非线程安全队列有两种实现方式:
1.使用数组实现的循环队列。
2.使用链表实现的队列。
先看看两种方式的优劣:
.Net Farmework中的普通队列Queue的实现使用了第一种方式,缺点是当队列空间不足会进行扩容,扩容的主要实现是开辟一个原始长度2倍的新数组,然后将原始数组里面的数据复制到新数组中,所以当扩容时就会产生不小的内存开销,在并发的环境中对性能的影响不可小视。当然在调用Queue的构造函数时可以指定默认空间的大小,但是一般情况下数据量是不可预测的,选大了会照成空间浪费,选小了会有复制内存的开销,而且队列扩容以后需要显示调用TrimToSize()方法才能回收掉不使用的内存空间。
第二种链表实现方式虽然消除了空间浪费的问题但是又增加了GC的压力,当入队时会分配一个新节点,出队时要对该节点进行废弃,对于大量的出队入队操作时该实现方式性能不高。
本文共计1220个文字,预计阅读时间需要5分钟。
入队(EnQueue)+ 出队(TryDequeue)+ 是否为空(IsEmpty)+ 获取队列元素数量(Count)。
一、ConcurrentQueue内部结构:
1.实现原理+众所周知,在普通的非线程安全队列中,有几种实现方式:
1. 使用数组实现。入队(EnQueue) 、出队(TryDequeue) 、是否为空(IsEmpty)、获取队列内元素数量(Count)。
一、ConcurrentQueue内部结构:
1.实现原理
众所周知,在普通的非线程安全队列有两种实现方式:
1.使用数组实现的循环队列。
2.使用链表实现的队列。
先看看两种方式的优劣:
.Net Farmework中的普通队列Queue的实现使用了第一种方式,缺点是当队列空间不足会进行扩容,扩容的主要实现是开辟一个原始长度2倍的新数组,然后将原始数组里面的数据复制到新数组中,所以当扩容时就会产生不小的内存开销,在并发的环境中对性能的影响不可小视。当然在调用Queue的构造函数时可以指定默认空间的大小,但是一般情况下数据量是不可预测的,选大了会照成空间浪费,选小了会有复制内存的开销,而且队列扩容以后需要显示调用TrimToSize()方法才能回收掉不使用的内存空间。
第二种链表实现方式虽然消除了空间浪费的问题但是又增加了GC的压力,当入队时会分配一个新节点,出队时要对该节点进行废弃,对于大量的出队入队操作时该实现方式性能不高。

