嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程

Linux多线程程序设计

1.线程出现的原因
<1>每一个进程都拥有自己的数据段,代码段和堆栈段,这就造成进程在进行创建和切换以及撤销等操作的时候,需要较大的系统开销。
<2>为了减少系统开销,将进程中演化出了线程
<3>线程存在于进程之中,共享进程的资源
<4>线程是进程中的独立控制流,由环境和一系列的执行指令组成。
通过一个图感受一下进程和线程的不同点
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第1张图片
2.线程和进程去比较
<1>传统意义上的进程被称为重量级的进程,从现代的角度来看,就是只拥有一个线程的进程
<2>线程与进程有着许多类似的性质,包含的关系,所以我们习惯上也称线程为轻量级进程
3.调度
<1>线程是CPU调度和分派的基本单位
<2>进程是系统中程序执行和资源分配的最小单位
<3>线程本身只拥有一部分必须拥有的资源,除此之外需要的资源都需要去进程中去调用
4.并发性和并行性
<1>不仅可以在进程间去进行并发性,在一个进程中的多线程之间也可以去执行并发性。并发性指的是在一个核上也就是只有一个cpu在进行处理的工作,它需要在一个周期内执行完所有的工作,然后一直重复着这个周期的工作,我们的电脑就是,但是由于我们肉眼的感觉,这个软件好像是同时进行的。
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第2张图片
<2>并行性指的是一个系统中存在着多个CPU,每一个CPU去执行一个进程。
5.使用多线程的优点
<1>在多处理器中开发程序的并行性
<2>在等待慢速的IO操作的时候,系统可以去执行其他的线程,提高并发性
<3>模块化的编程,能够更清晰的表达程序中独立事件的关系,结构清晰
<4>占用较少的资源
6.获取进程和线程的id
<1>每一个进程拥有自己的进程号,因此每一个线程也拥有着自己的线程号,但是这里需要注意的是,每一个进程的进程号在整个系统中都是独一无二的,但是每一个线程的线程号只是相对于它所属的进程环境而言的。
<2>进程号用一个pid_t去表示,他是一个非负整数。线程号则用phread_t数据类型来表示。因为二者都是无符号型所以在输出的时候需要用到%u。获取进程id需要调用getpid(),获取线程id需要phread_self();在调用程序中pthread.h库后,在编译的过程中一定要把这个库添加进来,感觉可以理解它是一个动态库
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第3张图片
7.创建一个线程
创建一个线程用到函数体 int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(start_routine)(void),void *arg);
第一个参数:新进程的id,线程标识符地址
第二个参数:线程属性结构地址,这里还没学到直接给她一个空
第三个参数:线程函数的入口地址,填写我们写的函数名
第四个参数:传给新线程执行函数的参数
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第4张图片
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第5张图片
嵌入式Linux应用开发 4 Linux多线程程序设计1 线程的概念 以及创建一个线程_第6张图片

你可能感兴趣的:(linux,linux)