C++并发编程有多线程和多进程两种方式,本文主要讲述进程和线程的概念,以及两者的区别,然后简单讲述如何使用Linux API进行多进程编程,多线程编程使用C++标准库即可实现,请参考C++学习笔记–多线程。
1 进程概念
进程是程序的一次动态执行过程。程序本身只是指令的集合,进程才是程序的真正运行,用户运行程序就产生了进程,用户关闭程序就结束了进程。一个程序可以产生多个进程,但一个进程只能由一个程序产生。进程有5种生命周期状态:创建、就绪、运行、阻塞、退出,下图表示了5种状态之间的关系。
与上面的5种状态不同,在Linux中使用top命令查看进程也有5种状态,但它是以不同的角度来描述进程状态:
R:运行状态,正在运行或在运行队列中等待
S:可中断(自愿)的睡眠状态,在等待某事件发生才可唤醒。如网页服务器的httpd进程,在客户端(浏览器)发出请求之前,服务器无事可做,选择睡眠。是程序角度的睡眠,程序本身控制自己的运行状态
D:不可中断(非自愿)的睡眠状态,有时两个进程试图同时访问同一系统资源,例如一个进程试图从磁盘数据块上读取信息,而另一个进程正在向该数据块写入信息。在这种情况下,内核迫使进程进入非自愿