`
xieyaxiong
  • 浏览: 39046 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

线程的描述

 
阅读更多

 

 

线程

 

进程和线程

到目前为止提出的进程的概念包含两个特点:

1:资源所有权:一个进程包括一个存放进程映像的虚拟地址空间;进程映像是程序、数据、栈和进程控制块中定义的属性的集合。一个进程总是拥有对资源的控制或所有权,这些资源包括内存、IO通道、IO设备和文件等。操作系统提供保护功能,以防止进程之间在发生不必要的与资源相关的冲突。

2:调度/执行:一个进程沿着可以通过一个或多个程序的执行路径(轨迹)执行。其执行过程可能与其他进程的执行过程交替进程 。因此,一个进程具有一个执行状态(运行、就绪等)和一个被分配的优先级,它是一个可被操作系统调度和分派的实体。

 

既然上述两个特点是独立的,那么操作系统应该能够独立地处理它们。很多操作系统,特别是近期开发的操作系统已经这样做了。为区分这两个特点,分派的单位通常称为线程或轻量级进程,而拥有资源所有权的单位通常称为进程 或任务。

 

 

多线程

多线程是指操作系统在单个进程内支持多个并发执行路径的能力

在多线程环境中,进程被定义成资源分配的单位和一个被保护的单位。与进程相联的有:

1:存放进程映像的虚拟地址空间。

2:受保护地对处理器、其他进程(用于进程间通信)、文件和IO资源(设备和通道)的访问。

在一个进程中,可能有一个或多个线程,每个线程有:

1:线程执行状态(运行、就绪等)。

2:在未运行时保存的线程上下文;从某种意义上看,线程可被视为进程内的一个独立操作的程序计数器。

3:一个执行栈。

4:用于每个线程局部变量的静态存储空间。

5:与进程内的其他线程共享的对进程的内存和资源的访问。

 

从进程管理的角度说明线程和进程的区别:在单线程进程模型中(也就是说,并没有明确的线程概念),进程的表示包括它的进程控制块和用户地址空间,以及在进程执行中管理调用/返回行为的用户栈和内核栈。当进程正在运行时,处理器寄存器将被该进程所控制;当进程不运行时,这些处理器寄存器中的内容将被保存。在多线程环境中,进程仍然只有一个与之关联的进程控制块和用户地址空间。但是每个线程都有一个独立的栈,还有独立的控制块用于包含寄存器值、优先级和其他与线程相关的状态信息。

因此,进程中的所有线程共享该进程的状态和资源,它们驻留在同一块地址空间中,并且可以访问到相同的数据。当一个线程改变了内存中的一个数据项时,其他线程在访问这一能够看到变化后的结果。如果一个线程以读权限打开一个文件,那么同一进程中的其他线程也能够从这个文件中读取数据。

 

 

线程功能特性

和进程一样,线程具有执行状态,且可以相互之间进行同步。

线程状态 

和进程一样,线程的关键状态有运行态、就绪态和阻塞态。一般来说,挂起态对线程没有什么意义,这是由于此类状态是一个进程级的概念。

1:派生:在典型情况下,当派生一个新进程时,同时也为该进程派生了一个线程。随后,进程 中的线程可以在同一个进程中派生另一个线程,并为新线程提供指令指针和参数;新线程拥有自己的寄存器上下文和栈空间,且被放置在就绪队列中。

2:阻塞:当线程需要等待一个事件时,它将被阻塞(保存它的用户寄存器、程序计数器和栈指针),此时处理器转而执行另一个就绪线程。

3:解除阻塞:当解除阻塞一个线程的事件发生时,该线程被移到就绪队列中。

4:结束:当一个线程完成时,其寄存器上下文和栈都被释放。

 

 

线程同步

一个进程中的所有线程共享同一个地址空间和诸如打开的文件之类的其他资源。一个线程对资源的任何修改都会影响同一个进程中其他线程的环境。因此,需要同步各种线程的活动,以便它们互不干涉且不破坏数据结构。例如,如果两个线程都试图同时往一个双向链表中增加一个元素,则可能会丢失一个元素或者破坏链表结构。

线程同步带来的问题和使用的技术通常与进程同步相同。

分享到:
评论

相关推荐

    线程描述生产与销售关系

    使用线程描述生产与销售关系,面向对象设计,高效率,安全性高

    多线程的简单描述

    java多线程简单的描述以及线程的安全、并发,同步机制

    \嵌入式linux开发教程之进程与线程--千锋培训

    线程描述数据结构及实现限制,2.嵌入式linux开发教程:管理线程,3.嵌入式linux开发教程:线程栈,4.嵌入式linux开发教程:线程id和进程id,5.嵌入式linux开发教程:线程的创建,6.LinuxThreads的不足

    Qt多线程通信 附源码demo

    代码中是针对信号和槽机制,进行描述和演示。环境是qt5.9 1、传递int参数(主线程与子线程) 2、传递自定义参数(主线程与子线程) 3、传递自定义参数(子线程与子线程) 4、传递自定义结构体参数(子线程与子线程)

    校招应用软件开发工程师(Java)

    2、关于进程和线程描述正确的是(C) A、进程是CPU调度的最小单位 B、线程是最小的资源分配单位 C、一个线程只能属于一个进程 D、同一进程中的多个线程不能并发执行; 11、关于数据库中的锁的说法,错误的是() A、...

    哲学家多线程

    哲学家多线程 java

    C#线程参考手册

    首先描述了Windows线程的定义,它们与.NET进程、应用程序域的关系以及线程之间的关系。讨论了线程的调度(操作系统如何确定下一个要处理的线程),接着论述了如何编写.NET代码来处理线程。之后介绍了线程的同步,让...

    创建多线程线程同步

    多线程的应用 主要是描述事件对象的创建和线程的同步

    多进程/线程编程:哲学家问题

     设置进程/线程,描述哲学家 ;  随机启动哲学家 ;  显示进程/线程执行状态;  随着线程的执行,更新显示;  编写正确的哲学家程序,设法延迟线程的执行,使之出现死锁;  编写正确的哲学家程序,保证...

    服务器和客户端利用线程的读写

    线程的详细描述 很好 很清楚的描述了 服务器和客户端是如何利用线程来接收和发送数据的

    java线程:两种传统的实现方式.zip

    JAVA语言实现:编写10个线程,第一个线程从1加到10,第二个线程从11加到20...第十个线程从91加到100,最后再把十个线程结果相加

    POSIX多线程程序设计

    内容提要, 本书深入描述了IEEE的开放系统接口标准-POSIX线程,通常称为Pthreads标准。本, 书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了, 一些高级话题,包括属性对象、线程私有...

    Python多线程编程

    Python多线程编程,简要描述了Python中多线程的实现过程

    CA多线程获取值源码

    源码描述: 因为线程是异步操作的,一旦对它Start()就有一种脱离了控制的感觉,尤其是对它最后的运行结果无法获取。在本代码中演示了等待各个线程执行完毕然后在主线程根据各线程返回的值来进行后面的操作。 在本...

    多线程文件备份源码201261

    多线程文件备份源码 项目描述 开发环境:VS2008 技术特点:多线程 功能描述:根据选择的目录,然后选择备份路径..该程序会根据选择目录的文件夹结构复制并且过滤文件到备份路径. 如果某一文件夹下的文件非常多的话,...

    多线程日志工具源码2012523

    多线程日志工具源码 项目描述 运行环境: .NET Framework 4.0 可打开源码降级至.NET Framework 2.0 或者 .NET Framework 3.5 技术特点: 多线程的Log工具,将程序中需要做log的地方输出至文件,无阻塞,无资源...

    POSIX多线程程序设计.pdf

    《POSIX多线程程序设计》深入描述了IEEE的开放系统接口标准——POSIX线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、...

    NET多线程同步方法详解

    本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入主题,在多线程开发的应用中,线程同步是不可避免的。在.Net框架中,实现线程同步主要通过以下的几种方式来实现,在MSDN的...

    10个线程的Python多线程爬虫(采集新浪数据).rar

     功能描述  使用python编写一个网站爬虫程序,支持参数如下:  spider.py -u url -d deep -f logfile -l loglevel(1-5) --testself -thread number --dbfile filepath --key="HTML5"  参数说明:  -u 指定爬虫...

    多线程编程指南(系统描述了线程标准 线程同步 多线程编程原则 等)

    1 多线程基础介绍15 定义多线程术语15 符合多线程标准16 多线程的益处17 提高应用程序的响应 17 有效使用多处理器17 改进程序结构17 占用较少的系统资源17 结合线程和RPC(远程过程调用)18 多线程概念18 并发性和...

Global site tag (gtag.js) - Google Analytics