1.进程与程序的区别?
进程与程序的区别:程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体;而进程可以认为是已经被OS从磁盘加载到内存上的、动态的、可运行的指令与数据的集合,是在运行的动态实体。
2.进程的概念
程序的运行实例(但这并不代表进程就是在运行,根据OS的调度,进程会处于不同的状态),进程是OS进行资源分配的基本单位。
3.线程的概念
线程是进程的一个执行分支,是OS进行调度的基本单位。
4.进程与线程的区别
除了上述概念上的区别外,进程强调资源独占(因为进程是资源分配的基本单位),而线程强调资源共享,但这个并非绝对,对于进程来说,也有共享的资源,比如,文件描述符表、信号的处理方式、当前的工作目录等。对于线程来说也其私有的资源,如:线程ID、上下文信息、栈空间、信号屏蔽字、调度的优先级等。
5.为什么使用多线程?
对于多进程来说,创建进程的开销较大,在调度时CPU压力较大,因此效率会低一些。
使用多线程与多进程相比,这是一种相对比较“节俭”的多任务处理方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
线程间提供方便的通信机制:对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。