Linux下进程线程区别

本文详细介绍了Linux环境下进程和线程的区别,包括它们的定义、创建方式、资源分配、上下文切换、通信机制以及同步安全。进程作为资源分配的单位,拥有独立的地址空间,而线程则共享进程的资源,线程切换相比进程切换更为高效。在通信方面,进程间通信涉及多种机制如管道、信号量,而线程主要依赖锁和条件变量进行同步。在选择多线程或多进程时,需要根据应用场景考虑资源消耗、创建销毁速度以及是否需要强相关性。
摘要由CSDN通过智能技术生成

Linux下进程线程区别

定义

  • 对于有线程系统:
    • 进程是资源分配的独立单位
    • 线程是资源调度的独立单位
  • 对于无线程系统:
    • 进程是资源调度、分配的独立单位

创建

  • 进程和线程的创建都是通过clone(2)来实现的
    • fork()->clone(SIGCHLD,0)
    • pthread_create()->clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND,0)
    • vfork()->clone(CLONE_VFORK|CLONE_VM|SIGCHLD,0)

SIGCHLD 意思是要求在子进程创建时必须注册SIGCHLD信号。当子进程退出时,系统会给父进程发送SIGCHLD信号,对其进行处理,避免子进程变成僵尸进程

CLONE_VFORK 使子进程创建以后优先于父进程运行(父进程此时被阻塞睡眠),直到子进程终结(terminate)或发出一个fatal信号或调用execve

线程共享虚拟地址空间,文件系统信息,打开的文件,信号处理函数和被阻断的信号

Linux进程创建三——fork、vfork、clone、kernel_thread

共享的资源

  • 进程
  • 线程
    • 私有
      • 线程栈,寄存器
    • 共享
      • 地址空间,堆,全局变量,静态变量

进程栈和线程栈

  • 进程栈
    • 虚拟地址空间当中user space 的stack区
  • 线程栈
    • 从进程的地址空间当中map出来的一块区域,大小固定,不支持动态增长
    • 是同一个进程的所有线程生成的时候浅拷贝生成者的 task_struct 的很多字段,其中包括所有的 vma,如果愿意,其它线程也还是可以访问到的,于是一定要注意。
      Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

上下文切换

  • 进程上下文切换:
    • CPU上下文切换(系统调用是发生的就是CPU上下文切换)
    • 内核栈信息
    • 虚拟内存替换(还有TLB刷新)、栈、全局变量等用户空间资源
  • 线程上下文切换
    • 进程切换比线程切换多了TLB的刷新,之所以说进程切换的开销比线程切换大,涉及到TLB失效—>页表失效—>效率降低

进程组和线程组

linux内核——进程,轻量级进程,线程,线程组

  • 进程组
    • 是用来方便管理进程的,一个进程只能属于一个进程组,只要进程组当中的一个进程没有结束,那么整个进程也没有结束
  • 线程组
    • 对线程getpid得到的并不是线程本身的pid,而是tgid
    • 一个tgid就是一个线程组

通信

  • 进程通信

    • 管道(pipe),流管道(s_pipe)和有名管道(FIFO)
    • 信号(signal)
    • 消息队列
    • 共享内存(mmap等)
    • 信号量
    • 套接字(socket)
  • 线程同步/通信:线程的通信主要是为了线程之间的同步,所以没有复杂的数据交换通信机制

    • 锁机制
      • 互斥锁+条件变量
      • 读写锁
    • 信号量机制
    • 信号机制

数据安全 (并发上)

  • 进程同步
    • 共享内存上加互斥锁和条件变量
    • 读写锁,记录锁,信号量,屏障
  • 线程同步
    • 互斥量,条件变量,自旋锁,屏障,信号量,读写锁
  • 区别在于锁的数据的位置,放在一个进程内的数据,还是数据

linux线程同步和进程同步的区别

终止

多线程和多进程的选择

  • 多进程
    • 优点:编程、调试简单,可靠性较高
    • 缺点:创建、销毁、切换速度慢,内存、资源占用大
  • 多线程
    • 创建、销毁、切换速度快,内存、资源占用小
    • 缺点:编程、调试复杂,可靠性较差
  • 选择
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值