进程特性
Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但与它的创建者共享全局变量、文件描述符、信号句柄和当前目录状态。
Linux通过fork创建子进程与创建线程之间是有区别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的变量和自己的PID,它的时间调度是独立的,它的执行几乎完全独立于父进程。
进程可以看成一个资源的基本单位,而线程是程序调度的基本单位,一个进程内部的线程之间共享进程获得的时间片。
介绍线程的基本函数,主要了解文章中的_REENTRANT宏,以及线程中的基本函数到线程属性
另一篇文章
多线程面试题集锦
生产者-消费者问题
生产者消费者
模型:
生产者—->有限的缓冲区—->消费者
问题描述:生产者产生项目并把他们插入到一个有限的缓冲区中。需要消费者从缓冲区中取出这些项目,然后消费他们。
因为插入和取出项目都涉及更新共享变量,所以我们必须保证对缓冲区的访问是互斥的。只保证互斥访问是不够的,我们还需要更新调度对缓冲区的访问。如果缓冲区是满的,那么生产者必须等待直到一个槽位变为可用。与之相似,如果缓冲区是空的,那么消费者必须等待直到有一个项目变为可用。
1 |
|
线程池
我们知道应用程序创建一个对象,然后销毁对象是很耗费资源的。创建线程,销毁线程,也是如此。因此,我们就预先生成一些线程,等到我们使用的时候在进行调度,于是,一些”池化资源”技术就这样的产生了。
一般一个简单线程池至少包含下列组成部分。
- 线程池管理器(ThreadPoolManager):用于创建并管理线程池
- 工作线程(WorkThread): 线程池中线程
- 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
- 任务队列:用于存放没有处理的任务。提供一种缓冲机制。
实现的具体代码见