线程的概念:什么是线程?

时间:2022-07-23

线程的概念:

1、在一个程序里的一个执行路线就叫做线程。更准确的定义为:线程是“一个进程内部的控制序列”。

2、一切进程至少都有一个执行线程。


进程和线程的区别:

1、进程是资源竞争的基本单位。

2、线程是程序执行的最小单位。

3、线程共享进程数据,但也拥有自己的一部分数据。


线程的优点:

1、创建一个新线程的代价要比创建一个新进程的代价小得多。

2、与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少得多。

3、线程占用的资源要比进程少得多。

4、能充分利用多处理器的可并行数量。

5、在等待慢速I/O操作结束的同时,程序可执行其他的计算任务。

6、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现。

7、I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同事等待不同的I/O操作。


线程的缺点:

1、性能损失

一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。

2、健壮性降低

编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

3、缺乏访问控制

进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。

4、编程难度提高

编写与调试一个多线程程序比单线程程序困难的多。

说了一些线程的基本概念后,现在我们来说一说线程控制,线程的创建、等待、终止、线程的结合与分离属性。


1、进程的创建

image.png

参数

thread:返回线程ID

attr:设置线程的属性,attr为NULL表示使用默认属性。

start_rountine:是个函数地址,线程启动后要执行的函数。

arg:传给线程启动函数的参数

返回值:成功返回0,失败返回错误码。


2、线程等待

为什么需要线程等待?

已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。

创建新的线程不会复用刚才退出线程的地址空间。

等待函数

image.png

参数

thread:线程ID

value_ptr:它指向一个指针,后者指向线程的返回值

返回值:成功返回0;失败返回错误码。


3、分离线程

默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_join操作,否则无法释放资源,从而造成系统泄露。

如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源。

分离函数

image.png


Copyright © 2016 广州思洋文化传播有限公司,保留所有权利。 粤ICP备09033321号

与项目经理交流
扫描二维码
与项目经理交流
扫描二维码
与项目经理交流
ciya68