第一次作业(1.线程和进程 )

来源:互联网 发布:ppt软件官方下载 编辑:程序博客网 时间:2024/05/19 13:08

线程和进程定义和区别            

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。进程是一个“执行中的程序”。所用运行中的任务通常对应一个进程,当一个程序进入内存中运行时,即变成一个进程。      

线程是进程的组成部分,通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。线程可以拥有自己的堆栈,自己的程序计数器,自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。            

线程与进程的区别归纳:

a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

d.在多线程OS中,进程不是一个可执行的实体。


线程和进程在linux下的区别和表现形式      

 linux是一个多任务多进程的操作系统,所以其他的进程必须等到系统将处理器使用权分配给自己之后才能运行。当正在运行的进程等待其他的系统资源时,linux内核将取得处理器的控制权,并将处理器分配给其他正在等待的进程,他按照内核中的调度算法决定将处理器分配给哪一个进程,也就是说,内核不会让处理器闲着。        

内核将所有进程存放在双向循环链表(进程链表)中,其中链表的头是 init_task 描述符。链表的每一项都是类型为 task_struct,称为进程描述符的结构,该结构包含了一个进程相关的所有信息,定义在<include/linux/sched.h>文件中。task_struct内核结构比较大,它能完整的描述一个进程,如进程的状态、进程的基本信息、进程标识符、内存相关信息、父进程相关信息、与进程相关的终端信息、当前工作目录、打开的文件信息、所接收的信号信息等。

    一个进程可以拥有多个线程,每个线程必须有一个父进程。线程不拥有系统资源,它只具有运行时所必须的一些数据结构,如堆栈/寄存器与线程控制块(TCB),线程与其父进程的其他进程共享该进程所拥有的全部资源。要注意的是,由于线程共享了进程的资源和地址空间,因此,任何线程对系统资源的操作都会给其他进程带来影响。由此可知,多线程中的同步是一个非常重要的问题。        

在Linux系统中,线程分为3种:①用户线程 ②轻量级线程 ③内核线程


并发        

并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。         

并发在操作系统的层面上好像是指得多进程的并发,但是在像java语言中的并发编程好像又是指的线程。             

 

1 0