老生常谈,面试必问的问题
进程 是程序执行时的一个实例,从内核的观点上看,进程的目的就是分配系统资源(CPU时间、内存等)的基本单位。
线程 是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的单位,线程与同属一个进程的其他线程共享进程所拥有的全部资源。例如:地址空间,内存页表,文件描述符表,信号域等
进程——资源分配的最小单位, 线程——程序执行的最小单位。
多线程和多进程相比,是一种非常节俭的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、数据段、堆栈段,这是一种昂贵的多任务工作方式。而运行于一个进程中的多线程。它们彼此之间使用相同的地址空间、共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且线程间彼此切换所需要的时间也远远小于进程间切换所需要的时间。
线程间方便的通信机制。对于不同进程来说,他们具有独立的数据空间,而进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。由于同一进程下的线程之间共享数据空间,所以可以方便的共享数据。当然数据共享也会带来一些安全问题,有的变量不能同时被两个线程所修改。需要线程同步,需要用到互斥锁和条件变量
网友评论