进程与线程:
进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流一个进程中可以并发多个线程,每个线程并行执行不同的任务。在Unix中,被称为轻量进程,但轻量进程更多指内核线程,而把用户线程称为线程。
线程与进程的区别和联系:
线程是指进程内的一个执行单元,也是进程内的可调度实体。每个进程至少需要一个线程。
与进程的区别:
- 地址空间:进程内的一个执行单元,进程至少一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间。
- 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程资源。(线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(寄存器,栈,程序计数器),但是它可与同一个进程的其他线程共享进程所拥有的全部资源)
- 线程是处理器调度的基本单位,但进程不是。
- 二者皆可并发执行(一个线程可以创建和撤销另一个线程,同一个进程中的多线程之间可以并发执行)
- 线程不可独立执行,进程可以独立执行
了解:
进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。
进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。
如果在单进程环境中,有多个线程正在运行,那么这些线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。
进程使用的系统资源比线程多得多。实际上,线程只有一个内核对象和一个堆栈,保留的记录很少,因此需要很少的内寸。因此始终都应该设法用增加线程来解决编程问题,避免创建新的进程。但是许多程序设计用多个进程来实现会更好些。
知道了这些,来做一道题目小试身手吧!
5、关于多线程和多进程编程,下面描述正确的是():
A 多进程里,子进程可获得父进程的所有堆和栈的数据;而线程会与同进程的其他线程共享数据,拥有自己的栈空间 B 线程因为有自己的独立栈空间且共享数据,所有执行的开销相对较大,同时不利于资源管理和保护 C 线程的通信速度更快,切换更快,因为他们在同一地址空间内 D线程使用公共变量/内存时需要使用同步机制,因为他们在同一地址空间内 E 因多线程里,每个子进程有自己的地址空间,因此相互之间通信时,线程不如进程灵活和方便
正确答案:ACD
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内