Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

进程与线程

  • 进程

    • 一个程序的运行实例,是资源分配的最小单位
      • 好比一个工厂,有单独的专属自己的资源
      • 不同进程之间是隔离的
        • 进程切换代价较大,需要保存和恢复上下文
        • 进程通信代价较大,需要引入进程间通信
      • 多进程
        • 操作系统允许多个进程互不干扰地运行并提供服务,比如挂着下载的同时,还能听歌,还能敲代码
    • 查看Linux进程
      • BSD风格命令
        ps aux
        
      • Unix风格命令
        ps -ef
        
    • 创建进程
      #include <unistd.h>
      
      pid_t fork(void);
      
      • 作用——创建“调用此函数的进程(我们称为父进程)”的副本
      • 调用后的程序流,需要根据返回值进行区分
        • 若大于0,即子进程ID,后面可以执行父进程的代码
        • 若等于0,后面执行子进程的代码
  • 线程

    • 一个进程中单独开启的一段要执行的代码,是CPU调度的最小单位
    • 好比工厂里的工人,多个工人在同一个工厂中协作劳动,共享资源
    • 不同线程之间共享进程的数据
      • 无需切换上下文
      • 可通过共享内存通信,但要用锁机制处理并发场景
    • 多线程
      • 一个程序内可以同时运行多个并行的执行流,完成各自的任务