进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。多进程技术存在很多的局限性,比如要分配大量的资源,进程的PID。
网络编程中越来越多的使用多线程技术实现代码的并行。
每一个进程内部都至少有一个线程,叫做主线程(main()),主线程一旦结束,进程随之结束,所有的线程也就结束了。
程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。
而进程则不同,它是程序在某个数据集上的执行,是一个动态实体,它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤销,反映了一个程序在一定的数据集上运行的全部动态过程。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位,是一种轻量级的代码并行技术,对资源的要求很少。
线程不能够独立执行,必须依存在应用程序中(线程隶属于某个进程),由应用程序提供多个线程执行控制。
线程共享进程d的资源有:代码区,数据区,堆区(无栈区),环境变量表,命令行参数,文件描述符,信号处理函数等。
线程本身不需要太多的资源,每个线程只需要额外的建立一个栈区即可。
同一个进程内部的多个线程之间既相互独立又相互影响。
每个线程的内部代码都是顺序执行,多线程之间代码乱序执行。
线程并行执行原理:宏观并行,微观串行。
线程和进程的关系是:线程是属于进程的(线程隶属于某个进程),线程运行在进程空间内,同一进程所产生的线程共享同一内存空间。当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其他线程共享进程所拥有的全部资源,但其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
根据进程和线程的设置,操作系统大致分为如下类型:
1)单进程、单线程,MS-DOS大致是这种操作系统;
2)多进程、单线程,多数UNIX(及类UNIX的LINUX)是这种操作系统;
3)多进程、多线程,WIN32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这种操作系统;
4)单进程、多线程,VxWorks是这种操作系统;
在操作系统中引入线程带来的主要好处:
1)在进程内创建、终止线程比创建、终止进程要快;
2)同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换;
另外线程的出现还因为以下几个原因:
1)并发程序的并发执行,在多处理环境下更为有效。
一个并发程序可以建立一个进程,而这个并发程序中的若干并发程序段就可以分别建立若干线程,使这些线程在不同的处理机上执行。
2)每个进程具有独立的地址控件,而该进程内的所有线程共享该地址控件。这样可以解决父子进程模型中子进程必须复制父进程地址空间的问题。
3)线程对解决c/s模型非常有效
早期unix不同版本中多线程的实现不尽相同,接口和实现差异很大。POSIX标准定义了统一的多线程编程接口。统称为Ptread POSIX线程。Pthread包含了一个头文件<pthread.h>和一个接口库libpthread.so
----------------------------------------分割线-------------------------------------------------
面试要用到的话只需要记住以下部分就可以,在分割线之上的是可以面试展开谈的部分。
1. 什么是进程?
具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。
2. 什么是线程?
是进程的一个实体,是cpu调度和分派的基本单元
3. 两者的区别?
1)线程是进程的一部分,也被称作轻量级的进程。
2)进程是资源分配的基本单位,线程是CPU调度的基本单位。
3)线程的创建比进程的创建系统开销小。