08 | 栈:如何实现浏览器的前进和后退功能?
用数组实现的栈,叫做顺序栈;用链表实现的栈,叫做链式栈
函数调用栈?表达式求值(保存操作数的栈、保存运算符的栈,操作符优先级比较),括号匹配
内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。
代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。
静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。
栈区:存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。
堆区:new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。
09 | 队列:队列在线程池等有限资源池中的应用
顺序队列,链式队列
当队列满时,tail指向的位置实际上是没有存储数据的。所以,循环队列会浪费一个数组的存储空间。队空、队满的判定条件
阻塞队列,生产者-消费者模型
并发队列,线程安全的队列
对于大部分资源有限的场景,当没有空闲资源时,基本上都可以通过队列这种数据结构来实现请求排队。线程池,数据库连接池
如何实现无锁并发队列:CAS实现无锁队列,Disruptor(之后有一讲)
高性能队列Disruptor、Linux环形缓存,用到了循环并发队列;Java concurrent并发包利用ArrayBlockingQueue来实现公平锁
本文探讨了栈和队列这两种基本数据结构在计算机科学中的关键作用,包括函数调用、表达式求值、内存管理以及线程池和资源管理等方面的应用。详细解释了顺序栈、链式栈、顺序队列、链式队列的概念,并介绍了阻塞队列、并发队列在多线程环境下的使用,以及无锁并发队列的实现原理。
7066

被折叠的 条评论
为什么被折叠?



