C++多线程并发(linux系统)
同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。
每个进程都有一个非负整数作为唯一的进程ID,用来表示各个进程,
进程创建:可以通过调用fork()或vfork()函数来创建新进程。在创建新进程时,要进行资源拷贝。常见的拷贝方式有三种:(1)共享 (2)直接拷贝 (3)Copy or Write 方式。
fork函数 #include <unistd.h> pid_t fork (void);
函数调用失败会返回-1. 调用成功会返回两个值:(1)在调用进程也就是父进程中,返回子进程ID。 (2)在子进程中,返回值为0. 因此可以通过返回值来区分子进程还是父进程。
fork使用场景
- 守护进程
为了保护父进程不被kill,或父进程异外退出后仍可再次启动(或后台运行),就执行fork()
让子进程监控主进程的运行状态,根据监听保护父进程的运行。
- 框架扩展
父进程只负责创建子进程,子进程去执子任务,这些任务可能多变、可能更新频繁,配合fork()
及exec()
函数,保证了父进程的稳定,同时避免频繁更新程序。