Advertisement

什么是堆栈?其区别?线程是什么?进程是什么?二者的区别和联系?

阅读量:

在数据结构中,堆栈是一种按照顺序排列的数据集合,在这种特殊的数据组织形式中,元素只能以特定的方式进行追加或删除操作。作为一个特定的存储区域,在单片机开发环境中被用来临时保存程序中的关键信息,并负责保护程序运行中的断点以及当前处理的状态信息。其主要作用是暂时存储数据和操作指令的地址信息,并通过这些方式来实现程序流程的有效管理。

要点:堆数据结构中采用队列优先级安排策略进行处理;其中FIFO(First In First Out)表示先进先出原则[1] 。栈数据结构则采用先进后出策略;FILO(First-In/Last-Out)表示先进后出原则。

内存区域分为常量区、静态区(全局区)、堆以及代码区。 管理策略:栈的内存管理由编译器自动完成无需人工干预;而堆的内存释放需由程序员手动操作以防止内存泄漏现象发生。 规划容量:当栈请求的空间超出现有可用空间时将触发"溢出"错误提示信息从而限制可从栈获取的空间规模;相反由于系统采用链表形式维护空闲内存块因此堆能提供更为灵活多样的空间分配机制并通常拥有较大的可用容量。 存储问题:频繁调用new和delete函数可能导致内存碎片现象尤其在高并发操作中容易引发程序效率下降的问题;而栈由于先进先出的特点不存在此类问题因为其结构设计决定了不会出现中间弹出的情况。 分配机制:虽然堆不具备静态分配功能但其动态分配功能同样依赖于编译器来完成;相比之下栈则提供了两种不同的分配方式其中一种是预先由编译器完成的静态分配例如局部变量存储另一种则是由特定函数如alloca负责执行的操作类型。 效率考量:作为底层数据结构栈始终受到硬件系统的直接支持包括专用寄存器用于存储地址以及压入弹出 dedicated指令等特性这些都决定了其运行效率极高;而堆虽然也是操作系统提供的资源但其内部实现较为复杂运行速度相对较低

多进程程序比多线程程序更加稳定,在切换进程中会消耗较多资源而导致运行效率相对较低。对于那些涉及多个并行任务且需共享某些变量的操作而言,则必须使用线程而不能采用进程

什么是多线程?
多 line threads 是指从 software 或 hardware 的角度实现多个 concurrent threads 的技术基础。
优点包括:

  • 可以把那些耗时较长的任务安排在后台处理;例如图片、视频文件的下载操作通常会被放在后台进行处理以提高系统响应速度;
  • 充分利用 多核 处理器的能力,并行执行使得系统运行速度提升显著;
    缺点包括:
  • 大量 threads 会降低代码的可读性;
  • 更多 threads 将需要占用更大的内存空间;
  • 当多个 threads 同时试图竞争同一资源时,则需特别注意 thread 安全问题。

iOS中有以下3种多线程编程方法:

  1. 核心数据结构:NSThread是一种基础的数据结构,在Objective-C编程中被广泛采用以实现多线程应用的核心逻辑。
  2. GCD框架: Grand Centeral Dispatch(GCD)是一个强大的框架设计模式,在iOS开发中被用来解决多线程I/O操作带来的性能问题。
  3. 核心操作集合与队列结构: NSOperation和NSOperationQueue分别构成了一个完整的运算体系和一个调度运算执行的队列机制。

1. 什么是线程?什么是进程?它们之间存在怎样的区别与联系?
(1)从系统资源管理的角度来看,在多线程环境下,CPU能够同时调度多个 thread,实现更高的资源利用率;
(2)在多进程中,每个 process 都占据独立的空间地址,一个 process 的崩溃不会影响其他 process 的正常运行;
两者的联系: thread 和 process 均属于操作系统中任务运行的基本单位,其划分标准不同但功能相似;
区别:
(1)一个 thread 可以被多个 processes 共享同一段代码段,而一个 process 的崩溃不会影响其他 process 的运行状态;
(2)从内存管理角度来看, thread 通常共享父进程的所有内存资源,而 process 之间有着明确的隔离机制;
(3)在时间段 sliced 多态系统中, thread 可以被单独调度并切换到不同的代码段执行,而 process 的切换则依赖于时间段切换机制;
(4)从内存管理角度看, thread 通常共享父进程的所有内存资源,而 process 之间有着明确的隔离机制;

全部评论 (0)

还没有任何评论哟~