进程和线程的区别探讨

进程和线程

  • 进程切换代价

  • 直接代价:页表全局目录、TLB、内核堆栈、硬件上下文、执行调度器代码

  • 间接代价:缓存失效(尤跨CPU调度)、cpu直接访存数量增加(差三个数量级)

  • 进程间通信

    • 管道、套接字、系统IPC(消息队列、信号量、信号、共享内存)
    • 普通管道:只用于亲戚进程通信。半双工通信,具有固定读端和固定写端,是只存在于内存的特殊文件
    • 具名管道:可用于非亲缘关系进程间通信,两者承载字节流数据,缓冲区有限
    • 消息队列:存放于内核中的消息链表,每个消息具有一个队列ID,是面向记录的、具有特定格式和优先级的消息机制。
    • 信号量:控制多进程访问共享资源,是一个实现了进程间互斥和同步的计数器
    • 信号:软终端,通知进程事件的发生
    • 共享内存:多个进程共同访问同一块内存空间,需要依靠互斥锁和信号量同步共享
    • 套接字:TCP/IP协议
  • 线程间通信

    • 互斥锁、条件变量、读写锁
  • 线程共享的资源

    • 进程共有数据、进程代码段、信号处理器、进程打开的文件描述符、进程工作目录、进程ID进程组ID
  • 线程独享的资源

    • 线程ID、线程栈、寄存器组值、错误返回码、信号屏蔽字、线程优先级
  • 进程终止

    • 1)main return;2)exit;3)最后一个线程return;4)最后一个线程pthread_exit;5)abort;6)信号;7)最后一个线程回应取消
  • vfork

    • 保证子进程先运行;不完全复制父进程地址空间;子进程执行exec后,父进程才被调度运行
posted @ 2020-07-31 16:55  阿龙233  阅读(126)  评论(0编辑  收藏  举报