【Linux】进程与线程

什么是进程呢?

Linux程序设计中是这样定义的,进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。即运行中的程序。也可以理解为是一组有序指令、数据、和资源的集合。每个进程都有一个非负整型表示的唯-进程ID。 因为进程ID标识符总是唯一的,常将其用其他标识符的-部分以保证其唯一性。 例如,应用程序有时就把进程ID作为名字的一部分来创建-一个唯一的文件名。进程控制块是进程存在的惟一标识,系统通过PCB的存在而感知进程的存在。进程控制块,底层实现是双循环链表。PCB里有程序计数器、程序上下文、资源(文件、信号)等。

进程中有哪些结构?

进程中有代码段、数据段、堆栈区域,也就是由程序、数据、进程控制PCB(Process Control Block)组成。进程控制块是进程存在的惟一标识,系统通过PCB的存在而感知进程的存在。
PCB:进程控制块,底层实现是双循环链表。PCB里有程序计数器、程序上下文、资源(文件、信号)

进程的状态

  • 就绪:等待系统调度执行的进程。
  • 运行:在CPU上执行的进程。
  • 阻塞:进程被阻塞,直到等待的条件发生,才将进程放入就绪队列中。
  • 挂起:只要不唤醒,则永远不被执行。

什么又是线程呢?

在一个程序中的多个执行路线就叫做线程(thread)。 更准确的定义是:线程是.一个进程内部的一个控制序列。

线程和进程的区别

  • 进程是资源分配的最小单位,线程是cpu调度的最小单位或者是程序执行的最小单位;
  • 进程有独立的地址空间,启动一个新的进程,系统必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。而运行一个进程中的线程,它们之间共享大部分数据,使用相同的地址空间,当然,线程是拥有自己的局部变量和堆栈;
  • 一个进程中可以包含多条线程,进程是一个独立的执行个体,而线程是进程内部的执行序列。
  • 进程切换效率低,代价大;线程切换效率高,代价小。
  • 线程之间的通信比较方便。同一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点。而进程之间的通信只能通过进程通信的方式进行;
  • 线程的执行与进程是有区别的。每个独立的线程有有自己的一个程序入口,顺序执行序列和程序的出口,但是线程不能独立执行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章