一、进程和线程
进程是一个运行起来的可执行程序。进程有三种状态:
- 就绪 进程获得了除了CPU外所有必要资源
- 运行 进程获得了所有资源,开始执行
- 阻塞 进程正在尚未满足要求,正在等待
线程是程序执行流的最小单位(要执行,最起码是一个线程)
二、线程和进程的联系和线程一些常识 2.1 线程和进程之间的联系- 进程必有唯一的主线程
- 进程和主线程同时创建同时结束
- 线程切换要比进程切换要快
- 线程不是越多越好(200-300最佳)
- 线程需要独立的堆栈空间,但没有自己独立地址
- 线程切换比进程切换要快
线程需要独立的堆栈空间用于切换时的中间状态。进程的资源特点是共享的,而进程则是独立。
具体地,线程拥有以下资源[1]:
- 栈空间(也就是自己的局部变量)
- 全局变量(包括静态)
- 文件描述符
- 信号处理函数
- 当前目录状态
相对于进程而言,进程拥有独立的变量空间和PID,如果需要交换变量,需要采用IPC技术。
三、并发和并行 3.1 并发并发是多个执行主体需要去做一件事情,但是资源只有一个。它需要解决的问题是竞争和同步的问题。
3.2 并行并行是多个执行主体需要去做一件事情,每个执行主体各自拥有自己的资源。它们之间互不干扰。
四、并发的实现方法 4.1 多个进程实现并发对于同一个电脑,可以通过管道、文件、消息队列和共享内存实现。对于不同电脑:用socket通信技术实现
4.2 多个线程实现并发线程之间共享数据,通信简单,系统开销小。但是它带了数据需要同步的问题。
五、C++11线程库实现并发不同系统的线程创建都不一样,跨平台不方便,虽然有POSIX thread(pthread),但是还是需要配置。C++11标准解决了这个问题。
[1] 马修, N. ), 斯通斯,等. Linux程序设计: 第4版[M]. 人民邮电出版社, 2010.
20201031 对线程具体共享的资源进行了说明。