当前位置:首页 > 内存 > 正文

阻塞队列在内存还是外存

  • 内存
  • 2024-06-12 02:22:28
  • 214

一、计算机的程序存放在哪个存储器中,是内存还是外存储器中?它在执行期间存储在内存中。其他时候它被放置在外部存储器中。当你运行一个程序时,操作系统会请求内存,然后将程序放入内存并执行。


二、关于计算机操作系统这门课的:当一个进程处于就绪状态,阻塞状态和执行状态时它的程序和数据部分在哪?当它处于就绪状态时,它的程序被放置在混合内存中。
三、阻塞队列在内存中吗?lockingQueue是一个基于数组的阻塞队列实现,其中维护一个固定长度的数组用于缓存ArrayBlockingQueue内的数据对象。除了固定长度数组之外,这还进行存储。两个内部整数变量分别标识数组中队列的开始和结束位置。当生产者放置数据和消费者检索数据时,ArrayBlockingQueue共享相同的锁定对象。也就是说,两者实际上无法并行运行。不同的是,按照实现原理,ArrayBlockingQueue可以使用单独的锁。生产者和消费者操作完全并行运行。DougLea没有这样做的原因是因为ArrayBlockingQueue的数据写入和检索操作已经足够轻,引入单独的锁定机制不仅会使代码进一步复杂化,而且不会带来任何性能提升。一切都很便宜。ArrayBlockingQueue和LinkedBlockingQueue之间的另一个明显区别是,前者在插入或删除元素时不会创建或销毁额外的对象实例,而后者会创建额外的Node对象。对于需要长时间高效、同时处理大量数据的系统,对GC的影响还是存在一些差异的。创建ArrayBlockingQueue时,还可以控制对象的内部锁是否使用公平锁,以及默认是否使用非公平锁。
BlockingQueue维护了一个内部数据缓冲队列,类似于ArrayListBlockingQueue(队列由链表组成,作为生产者放置数据)。当你对数据进行排队时,队列会从生产者那里检索数据并将其缓存在队列内,只有当队列缓冲区达到其最大缓存容量(LinkedBlockingQueue允许你通过其构造函数指定该值)时,生产者才会很快回来。生产者的队列被阻塞,并启动生产者的线程,直到消费者消费完队列中的数据,反之消费者端处理也是基于同样的原理。LinkedBlockingQueue能够高效处理并发数据,因为它在生产者端和消费者端使用独立的锁来控制数据同步。这也意味着生产者和消费者可以对队列中的数据进行操作,并以高并发的方式并行运行。跨队列的并发性能。开发人员应该注意,如果他们构造LinkedBlockingQueue对象而不指定容量,则当生产者的速度大于该速度时,LinkedBlockingQueue将默认为接近无限大小(_VALUE)的容量。消费者可能很快,并且可能在队列填满和阻塞之前耗尽系统内存。ArrayBlockingQueue和LinkedBlockingQueue是两个最常用的阻塞队列。一般情况下,使用这两个类足以处理跨多线程的生产者-消费者问题。
tyBlockingQueue:与LinkedBlockQueue类似,但它包含的对象的顺序是基于对象的自然排序顺序,或者由构造函数的Comparator确定的顺序,而不是先进先出。
onousQueue:一种特殊的BlockingQueue。对该队列的操作必须由put和take交替完成。