进程和线程的有什么异同详解

进程

  • 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。
  • 操作系统管理核心中的重要对象,从0进程(os不可见),到1号(init)。。。,到N号,人机交互shell。。。
  • 是最小资源分配单位,可看成是只有一个线程的进程。

线程

  • 在Linux环境下的轻量级进程,LWP,light weight progress
  • 在进程内部的并行执行流,无独立资源(使用进程资源)下运行
  • 是最小的执行单位,调度的基本单位。

相同

  • 都是实现多任务并发的技术手段
  • 都可以独立调度,父子进/线程调度时平等竞争
  • 2.4版内核以前,二者实现方式相同,2.6版以后单独实现线程。

复制对方的地址空间,那么就产生一个进程,如果共享对方的地址空间,就产生一个线程。Linux内核是不区分进程和线程的,只有在用户层面上进行区分。所以,线程所有操作函数pthread_*是库函数,而非系统调用,编译和链接时需要加-pthread选项

差异

  • 进程是资源分配的基本单位,线程是调度的基本单位。
  • 每个进程至少包含一个主线程(main函数)
  • 进程之间完全独立,线程只能依附于进程,线程也有PCB,但没有独立的地址空间(共享)

进程与线程特性

  • 线程创建和切换时的系统开销比进程小,效率更高
  • 一个进程内部的线程间信息共享和通信比进程简单高效
  • 线程除了能够使用进程间通信(IPC)的所有方式外,海鸥互斥量、自旋锁、条件变量、读写锁、线程信号与全局变量,方式更多,更灵活高效。
  • 线程ID数量更多,进程退出后,分配和申请的相关资源(如打开的文件描述符等)有操作系统回收,子线程退出后,资源仍在进程空间中,需要人工回收
  • 进程之间“辈分”分级严格,线程之人一个主线程(main函数)
  • 父进程退出后,子进程运行不受影响,主线程(即进程)退出,所有子线程全部消亡。

线程的优缺点

  • 优点:1)提高程序并发性 2)开销小 3)数据通信、共享数据方便
  • 缺点:1)库函数实现,稳定性不如进程 2)编写、测试、测验难度相对更大,gdb不支持 3)对信号支持不好

线程的优点相对突出,缺点均不是硬伤。Linux下由于实现方式使得进程、线程之间的差别不是很大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章