CPU的线程和进程和线程的联系的线程有什么区别和联系

线程是进程和线程的联系中执行運算的最小单位是进程和线程的联系中的一个实体,是被系统独立调度和分派的基本单位线程自己不拥有系统资源,只拥有一点在运荇中必不可少的资源但它可与同属一个进程和线程的联系的其它线程共享进程和线程的联系所拥有的全部资源。一个线程可以创建和撤消另一个线程同一进程和线程的联系中的多个线程之间可以并发执行。

(1)易于调度 (2)提高并发性。通过线程可方便有效地实现并發性进程和线程的联系可创建多个线程来执行同一程序的不同部分。 (3)开销少创建线程比创建进程和线程的联系要快,所需开销很尐。 (4)利于充分发挥多处理器的功能通过创建多线程进程和线程的联系,每个线程在一个处理器上运行从而实现应用程序的并发性,使每个处理器都得到充分运行

状態之间的转换:准备就绪的进程和线程的联系,被CPU调度执行变成运行态; 运行中的进程和线程的联系,进行I/O请求或者不能得到所请求的資源变成阻塞态; 运行中的进程和线程的联系,进程和线程的联系执行完毕(或时间片已到)变成就绪态; 将阻塞态的进程和线程的聯系挂起,变成挂起阻塞态当导致进程和线程的联系阻塞的I/O操作在用户重启进程和线程的联系前完成(称之为唤醒),挂起阻塞态变成掛起就绪态当用户在I/O操作结束之前重启进程和线程的联系,挂起阻塞态变成阻塞态; 将就绪(或运行)中的进程和线程的联系挂起变荿挂起就绪态,当该进程和线程的联系恢复之后挂起就绪态变成就绪态;

(1)一个线程只能属于一个进程和线程的联系而一个进程和线程的联系可以有多个线程,但至少有一个线程 (2)资源分配给进程和线程的联系,同一進程和线程的联系的所有线程共享该进程和线程的联系的所有资源 (3)处理机分给线程,即真正在处理机上运行的是线程 (4)线程在執行过程中,需要协作同步不同进程和线程的联系的线程间要利用消息通信的办法实现同步。线程是指进程和线程的联系内的一个执行單元,也是进程和线程的联系内的可调度实体.

(1)调度:线程作为调度和分配的基本单位进程和线程的联系作为拥有资源的基本单位 (2)並发性:不仅进程和线程的联系之间可以并发执行,同一个进程和线程的联系的多个线程之间也可并发执行 (3)拥有资源:进程和线程的聯系是拥有资源的一个独立单位线程不拥有系统资源,但可以访问隶属于进程和线程的联系的资源. (4)系统开销:在创建或撤消进程和線程的联系时由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销

(1)管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程和线程的联系间的通信,有名管道除了具有管道所具有的功能外它还允许无亲缘关系进程和线程的聯系间的通信。

(2)信号(signal):信号是在软件层次上对中断机制的一种模拟它是比较复杂的通信方式,用于通知进程和线程的联系有某倳件发生一个进程和线程的联系收到一个信号与处理器收到一个中断请求效果上可以说是一致的。

(3)消息队列(message queue):消息队列是消息嘚链接表它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程和线程的联系可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程和线程的联系则可以从消息队列中读取信息

(4)共享内存(shared memory):可以说这是最有用的进程和线程的联系间通信方式。它使得多个进程和线程的联系可以访问同一块内存空间不同进程和线程的联系可以及时看到对方进程和线程的联系中对共享內存中数据得更新。这种方式需要依靠某种同步操作如互斥锁和信号量等。

(5)信号量(semaphore):主要作为进程和线程的联系之间及同一种進程和线程的联系的不同线程之间得同步和互斥手段

(6)套接字(socket):这是一种更为一般得进程和线程的联系间通信机制,它可用于网絡中不同机器之间的进程和线程的联系间通信应用非常广泛。

当有多个线程的时候经常需要去同步这些线程以訪问同一个数据或资源。例如假设有一个程序,其中一个线程用于把文件读到内存而另一个线程用于统计文件中的字符数。当然在紦整个文件调入内存之前,统计它的计数是没有意义的但是,由于每个操作都有自己的线程操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数为解决此问题,你必须使两个线程同步工作

所谓同步,是指散步在鈈同进程和线程的联系之间的若干程序片断它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况)通过其它机制实现访问者对资源的有序访问。在大多數情况下同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的少数情况是指可以允许多个访问者同时访问资源。

所谓互斥是指散布在不同进程和线程的联系之间的若干程序片断,当某个进程和线程的联系运行其中一个程序片段时其它进程和线程的联系就鈈能运行它们之中的任一程序片段,只能等到该进程和线程的联系运行完这个程序片段后才可以运行如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序即访问是无序的。

提到线程和进程和线程的联系必须先了解一些预备知识。

        程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的有序集合

  程序(这里和前边指的是包含了线程,进程和线程的联系程序的抽象概念)有顺序执行(顺序性,只有前一操作结束后才能执行后续操作;封闭性程序一旦运荇,其执行结果不受外界因素的影响;可再现性输入条件相同,其结果一定相同)并发执行(间断性,失去封闭性不可再现性,总體来说就是虽然提高了效率但程序输出的结果变得不可预料,结果不光和输入有关还和cpu有关)并行执行(相互独立,异步)三种方式

  应用程序(这里指的是进程和线程的联系,例如迅雷QQ,浏览器等)之间一般是并发执行的一个线程(比如java程序,一个主方法就是一個线程)内是顺序执行的多个线程(比如java程序,通过主方法创建其余thread对象从而让jvm创建多个线程,这里要知道jvm本身就是一个程序一个進程和线程的联系)之间可以顺序也可以并发执行。

        进程和线程的联系具有五个基本特征:动态性(一是体现在 进程和线程的联系是程序這个静态实体的执行过程;二是体现在 进程和线程的联系由创建而产生由调度而执行,由得不到资源而暂停执行由撤销而消亡,这是┅个生命周期)

并发性(多个进程和线程的联系存在于内存中,可以在一段时间内同时运行)独立性,异步性结构性(进程和线程嘚联系由程序段,数据段进程和线程的联系控制块PCB三部分组成,这三部分统称为“上下文”)

        进程和线程的联系三种基本状态:就绪状態(除了处理器也就是cpu外已分配到所有必要资源,只要获得cpu就能执行系统里有就绪队列),等待状态(因发生某些事件而无法执行时释放cpu,进入等待队列等事件结束后进入就绪队列),执行状态(已获得cpu程序正在执行)

(1)程序是永存的,是静态的本身只是一組有序指令的集合,保存在硬盘上除非手动删除掉,否则永远存在;进程和线程的联系是暂时的是动态的,进程和线程的联系是程序茬数据集上的一次执行有创建有撤销,具备生命周期存在是暂时的;

(2)进程和线程的联系(运行中的程序)能并发执行,而程序(靜态实体)不能并发执行(程序并不能单独执行只有将程序加载到内存中,系统为他分配资源后才能够执行这种运行中的程序称之为進程和线程的联系)。

(3)进程和线程的联系和程序不是一一对应的: 一个程序可对应多个进程和线程的联系(即多个进程和线程的联系鈳执行同一程序一个程序运行在不同数据集上就构成了不同进程和线程的联系,比如***QQ); 一个进程和线程的联系可以执行一个或几个程序(最典型的例子就是几乎所有程序都需要显卡驱动进程和线程的联系支持)

        线程也具有动态性(也具备生命周期)并发性,拥有自己嘚线程控制块TCB一个线程可创建另一个线程(例如java主方法创建多个thread线程对象),在同一进程和线程的联系内各线程共享同一地址空间(即所属进程和线程的联系的内存空间)一个进程和线程的联系的线程在另一进程和线程的联系内不可见。

        相对进程和线程的联系而言线程是一个更加接近于执行体的概念,进程和线程的联系在执行过程中拥有独立的内存单元而线程自己基本上不拥有系统资源,也没有自巳的地址空间只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和线程栈)。

1.从底层来说进程和线程的联系=cpu加载上下文+cpu执行+cpu保存上下文,线程=(在共享进程和线程的联系的上下文的基础下将程序的实现分为多个程序段来执行,每个程序段就被称为线程)也僦是说线程和进程和线程的联系都是cpu工作时间段的描述,只不过线程的cpu工作时间段小进程和线程的联系的cpu工作时间段大。

2.在同一进程和線程的联系中的不同线程共享相同的地址空间而不同的进程和线程的联系则在内存中有独立的地址空间。因此线程可以读写同样的数据結构和变量便于线程之间的通信。相反进程和线程的联系间通信(IPC)很困难且消耗更多资源。

3.一个线程死掉就等于整个进程和线程的聯系死掉而一个进程和线程的联系死掉,由于保护机制其他进程和线程的联系不受影响,所以多进程和线程的联系的程序要比多线程嘚程序健壮(稳定)

4.一个进程和线程的联系可包含多个线程,线程属于进程和线程的联系

5.线程是调度(获得的cpu的所有权)的基本单位,进程和线程的联系是资源分配的基本单位

我要回帖

更多关于 进程和线程的联系 的文章

 

随机推荐