进程与线程---------共享与私有

进程process
             是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。

同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一 程序,却不会相冲突。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程thread
            是操作系统能够进行运算调度的最小单位。是独立调度和分派的基本单位。

一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务;一个线程可以创建和撤销另一个线程。

线程可以为操作系统内核调度的内核线程。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈), 但是同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时运行,但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(/私有的)栈(stack),win线程的缺省堆栈大小为1M。堆heap的分配与栈有所不同,一般是一个进程有一个C运行时堆,
这个堆为本进程中所有线程共享,win进程还有进程默认堆,用户也可以自己创建堆。用操作系统术语,就是线程切换的时候实际上切换的是一个可以称之为线程控制块的结构(TCB),里面
保存所有将来用于恢复线程环境的必须信息,包括所有必须保存的寄存器集,线程的状态。

 堆是公有的空间,分为全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以像系统要额外的堆,但是记得
用完了要还给操作系统。要不然就是内存泄漏。

是线程独有的,保存其运行状态和局部自变量。栈在线程开始的时候初始化,每个线程的栈相互独立。因此,栈是Thread safe的。操作系统在切换线程的时候后自动切换栈,即切换
SS<栈段寄存器>/ESP<栈顶指针>寄存器。栈空间不需要再高级语言里面显示的分配和释放。

线程管理:
                 将线程公有的信息放在进程控制块里,将线程独有的信息存放在线程控制块中。

如何区分哪些信息时共享?哪些私有?
              一般的评价标准是:如果某些资源不独享会导致线程运行错误,则该资源就由某个线程独享,而其他资源都由进程里面的所有线程共享。

对于进程一线程的实现如何做解释?
            首先应该明白进程的调度,创建等实质上都是有操作系统实现的,即进程的实现只能由操作系统内核来实现,而不存在用户态实现的情况。
             对于线程,线程的管理者可以是用户也可以是操作系统本身。因此,线程的实现就应该分为内核态线程实现和用户态线程实现。

内核态线程实现:
                  线程时进程的不通过执行序列,即线程是独立运行的基本单位,也是CPU的基本单位。

操作系统如何实现线程管理?
           首先操作系统向管理进程一样,应该保持维护线程的所有资源,将线程控制块存放在操作系统的内核空间中。那么此时操作系统就同时掌控进程控制块和线程控制块。

优点:用户编程简单;不容易阻塞。缺点:效率低,需要修改操作系统。

用户态线程实现:
           用户自己做线程的切换,操作系统无需知道线程的存在。
           需要创建一个调度线程,在执行完需主动把资源释放给其他线程使用。          优点:灵活,无需修改操作系统实现。缺点:需要考虑很多原因,

现在操作系统的线程实现模型:
            用户态执行负责进程内部线程在非阻塞时的切换;内核态的操作系统负责阻塞线程的切换。每个内核态线程可以服务一个或多个用户态线程。

线程什么时候会从用户态切换到内核态:
            首先,如果程序运行过程中发生中断或者异常,系统将自动切换到内核态运行中断或异常处理机制;或者,程序进行系统调度也会从用户态切换到内核态。

原文地址:https://www.cnblogs.com/liamlee/p/9393553.html

时间: 2024-10-11 16:42:50

进程与线程---------共享与私有的相关文章

同一进程的线程共享的资源和独有的资源

线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标 识线程. 2.寄存器组的值 由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线 程切换到另一个线程上时,必须将原有的线程的寄存

同一进程中的线程共享的资源有哪些 转载

转自:http://blog.csdn.net/shuilan0066/article/details/7683315 线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥有自己的个性.有了这些个性,线程才能实现并发性.这些个性包括: 1.线程ID       每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标 识线程.

[面试题总结及扩展知识]同一进程中的线程共享的资源

又是一道腾讯2014年的面试题: A,栈   B,数据段    C,寄存器组    D,文件描述符 这是解释以及相对应的扩展知识: 线程的共性如下: 线程共享的环境包括:进程代码段. 进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯). 进程打开的文件描述符. 信号的处理器.  进程的当前目录和进程用户ID与进程组ID. 线程的个性如下: 1.线程ID     每个线程都有自己的线程ID,这个ID在本进程中是唯一的.进程用此来标识线程. 2.寄存器组的值     由于线程间是并

程序、进程、线程的联系与区别

程序:一组指令的有效集合 进程:程序的执行就是进程.也可以把进程看成一个独立的程序,在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己.进程是资源分配的基本单位,也是调度运行的基本单位. 线程:线程被人们认为是轻量级的进程,它是进程中单独运行的一路程序.换句话说,就是一个进程可以包含多个线程,并且至少有一个主线程,同时同一进程的线程共享该进程的代码和数据.于此同时,每一个线程又都有自己的堆栈,这些堆栈对于线程来说是私有的.线程是处理机调度的基本单位. 那为什么要引入线程呢

进程、线程与处理器的调度

随文出至:http://blog.sina.com.cn/s/blog_5a2bbc860101gedc.html (1)进程的概念(Dijkstra) 进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的基本单位. (2)进程与程序的联系与区别 ① 程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念.而进程是程序在处理机上的一次执行过程,它是一个动态的概念. ② 程序可以作为一种软件资料长期存在,而进程是有一定生命期的.程序是永久的,进程是暂时的

进程与线程的一个复杂解释

关于进程和线程,面试的时候被问了两次都没有答出来.第一次问完稍微看了下概念,并没有完全理解所以也没有记住,所以第二次被问到的时候也没回答出来o(╯□╰)o.. 所以这次把这个问题彻底解决一下. 标题是模仿阮一峰大大的"进程与线程的一个简单解释",见http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html,里面比喻得很形象. 定义 进程(英语:process),是计算机中已运行程序的实体.进程为曾经是分时系统的基本

[ Python - 14 ] python进程及线程编程

什么是进程: 简单来讲,进程就是操作系统中运行的程序或任务,进程和程序的区别在于进程是动态的,而程序是静态的.进程是操作系统资源管理的最小单位. 什么是线程: 线程是进程的一个实体,是cpu调度和分派的最小单位,它是比进程更小的能独立运行的基本单位,线程本身不拥有资源,但它可以与同属于一个进程的线程共享进程的资源所拥有的全部资源. python多线程编程与GIL: 为了更有效的利用多核处理,就出现了多线程编程,但是问题是线程间数据的一致性和状态的同步如果得到保证,因此python解析器引入了GI

CPU的核、进程和线程

转自https://www.cnblogs.com/-new/p/7234332.html 一.CPU与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的4核8线程,4核指的是物理核心.通过超线程技术,用一个物理核模拟两个虚拟核,每个核两个线程,总数为8线程. 在操作系统看来是8个核,但是实际上是4个物理核. 通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核. 单核cpu和多核cpu 都是一个cpu,不同的是每个cpu

并发、并行、进程、线程

参照百度百科 在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. 操作系统并发程序执行的特点: 并发环境下,由于程序的封闭性被打破,出现了新的特点: ①程序与计算不再一一对应,一个程序副本可以有多个计算(如神经网络中的多GPU并行计算) ②并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争某一资源,如处理机.缓冲区等. ③并发程序在执行中