线程和进程:
进程有独立的地址空间,一个进程崩溃后,在保护模式的影响下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等同于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
线程是CPU独立运行和独立调度的基本单位(可以理解为一个进程中执行的代码片段)。
进程是资源分配的基本单位(进程是一块包含了某些资源的内存区域)。
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程是线程的容器,真正完成代码执行的线程,而进程则作为线程的执行环境。一个程序至少包含一个进程,一个进程至少包含一个线程,一个进程中的所有线程共享当前进程所拥有的资源。
进程和线程的差别。
答:线程是指进程内一个执行单元,也是进程内的可调度实体。
与进程的区别:1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源
4)系统开销:在创建或者撤销进程时,由于系统都为之分配和回收资源,导致系统的开销明显大于创 建或撤销线程时的开销。
Heap与Stack的差别
答:Heap是堆,stack是栈。栈的空间由操作系统自动分配、释放,堆上的空间手动分配、释放。Stack空间有限,堆是很大的自由存储区 C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译器对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行。