1.线程是什么?进程是什么?二者有什么区别和联系?
(1)线程是CPU独立运行和独立调度的基本单位;
(2)进程是资源分配的基本单位;
两者的联系:进程和线程都是操作系统所运行的程序运行的基本单元。
区别:
(1)进程具有独立的空间地址,一个进程崩溃后,在保护模式下不会对其它进程产生影响。
(2)线程只是一个进程的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。
什么是堆栈?有什么区别?
堆栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出(FIFO—first in first out)[1] 。栈,先进后出(FILO—First-In/Last-Out)。
内存的分区:常量区,静态区(全局区),堆,栈,代码区
1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存泄露。
2.申请大小:如果栈申请的空间超过栈的剩余空间时,将提示内存溢出(8M)。因 此,能从栈获得的空间较小。堆是由于系统是用链表来存储的空闲内存地址的,不是连续的堆获的空间比较灵活,也比较大。
3.碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎 片,使程序效率降低对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出
4.分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
5.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的
多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差写,对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
什么是多线程?
多线程:是指从软件或者硬件上实现多个线程的并发技术。
多线程的好处:
(1)使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片、视屏的下载
(2)发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好
多线程的缺点:
(1)大量的线程降低代码的可读性;
(2)更多的线程需要更多的内存空间
(3)当多个线程对同一个资源出现争夺时候要注意线程安全的问题。
IOS中实现多线程的方法
常用的:NSThread NSOperationQueue GCD