C++进程线程协程
本文介绍进程、线程和协程的基础知识和用法
进程
进程的基础知识
进程的基本概念
进程这个概念是针对系统而不是针对程序员的,对程序员来说,面对的概念是程序,当输入指令执行一个程序的时候,对系统而言,它将启动一个进程
进程就是正在内存中运行中的程序,Linux 下一个进程在内存里有三部分的数据,就是“代码段”、“堆栈段”和数据段”
“代码段”,顾名思义,就是存放了程序代码
“堆栈段”分为堆区(Stack)和栈区(Heap),堆区存放动态数据分配的数据空间(比如用 new 函数分配的空间)
栈区存放程序的返回地址、程序的参数以及程序的局部变量
“数据段”存放程序的全局变量,常数和静态变量
系统如果同时运行多个相同的程序,它们的“代码段”是相同的,“堆栈段”和“数据段”是不同的(相同的程序,处理的数据不同)
ps 查看进程
ps 查看当前终端的进程
ps -ef 查看系统全部的进程
ps -ef |more 查看系统全部的进程,结果分页显示
UID: 启动进程的操作系统用户
PID: 进程编号
PPID: 进程的父进程的编号
C: CPU 使用的资源百分比
STIME: 进程启动时间
TTY: 进程所属的终端
TIME: 使用掉的 CPU 时间
CMD: 执行的是什么指令
ps -ef |grep book 查看系统全部的进程,然后从结果集中过滤出包含“book”单词的记录
getpid 函数获取进程编号
getpid 库函数的功能是获取本程序运行时进程的编号
函数声明:
1 | pid_t getpid(); |
注意两个细节
- 进程的编号是系统动态分配的,相同的程序在不同的时间执行,进程的编号是不同的
- 进程的编号会循环使用,但是,在同一时间,进程的编号是唯一的,也就是说,不管任何时间,系统不可能存在两个编号相同的进程
多进程的基础知识
函数声明:
1 | pid_t fork(); |
fork 函数创建了一个新的进程,新进程(子进程)与原有的进程(父进程)一模一样
子进程和父进程使用相同的代码段;子进程拷贝了父进程的堆栈段和数据段
子进程一旦开始运行,它复制了父进程的一切数据,然后各自运行,相互之间没有影响
fork 函数对返回值做了特别的处理,调用 fork 函数之后,在子程序中 fork 的返回值是0,在父进程中 fork 的返回值仍是原进程的编号,程序员可以通过 fork 的返回值来区分父进程和子进程,然后再执行不同的代码
多进程的应用场景
线程
协程
- Titre: C++进程线程协程
- Auteur: tiny_star
- Créé à : 2025-10-20 13:07:09
- Mis à jour à : 2025-10-25 16:58:34
- Lien: https://tiny-star3.github.io/2025/10/20/Cpp/C++ProcessThreadCoroutine/
- Licence: Cette œuvre est sous licence CC BY-NC-SA 4.0.