操作系统学习笔记3--多线程编程

本文详细介绍了操作系统中的多线程概念,包括线程与进程的异同、线程的优点、线程ID、并发与并行的区别。讨论了线程的创建策略,如线程池、OpenMP和GCD,并探讨了Linux环境下多线程编程,涉及线程创建、运行、销毁及同步问题。通过实例解析了多线程在数据并行计算中的应用。
摘要由CSDN通过智能技术生成

1.进程与线程

1.1线程和进程的异同

进程是系统资源分配的基本单位,线程比进程小,是调度的基本单位。

线程独立资源包括:线程id,程序计数器,寄存器租和堆栈。与其他线程共享资源包括:同一进程的代码段,数据段和其他资源,如io等。如果一个进程具有多个线程,那么对于多核cpu,可以同时执行多个线程。对于单核cpu,虽然同一时刻只有一个线程执行,但是cpu可以再空闲时调度其他线程进行执行,当某个线程进行io操作需要等待时,cpu空闲,转而执行其他线程,这样cpu高速在多个线程之间交替执行,给人感觉“同时”执行,但并不是真的同时执行。

在RPC系统中,线程起着至关重要的作用。rpc的通讯进制中,当收到请求时,需要对请求进行回应,通常服务器会使用一个线程去处理这个请求,这样运行服务器处理多个请求,提供并发性。

1.2 线程的优点

1.经济:线程更小,因而创建代价小,占用资源少,切换方便,效率高。

2.可伸缩性:充分利用多核系统的的并行资源。

3.响应性:在执行某个需要持续一段时间的任务时,cpu不需要等待该任务执行结束再去执行其他任务,而是可以直接去执行其他任务。因而可以极大的提升多任务的执行效率。

4.资源共享:同一个进程中的多个线程共享进程的内存和资源。而不同进程只能通过共享内存或消息传递来共享资源。

1.3 线程id与线程id

进程id:processID,简称pid。进程可以理解为一组线程,也称线程组。因此pid用于区分线程的归属,不属于同一个进程的线程,其pid必定不同。

线程id:threadID,简称tid。对于单线程的进程,其pid和tid相同,而同一个进程的线程有不同的线程id用于区分。

1.4 并发与并行

并发:可以在短时间内处理多个任务,但是不能同时。只不过多个任务之间切换的很快,显得“同时”处理。可以处理多个任务,但是不能同时。如先吃饭,收到电话,转而接听电话,接听完毕后再吃饭。如多个用户同时向服务器发送请求,服务器每次只能处理一个请求,但是每个请求完成或进行io操作需要等待时,cpu去处理其他请求,这样短时间内处理很多请求,提高并发性。而如果使用单线程,请求又是io操作,那么除非io操作完成,否则cpu无法执行其他请求。

并行:可以同时处理多个任务。对于多核cpu的多线程适用,每个计算核都可以同时执行一个线程。吃饭时收到电话,同时吃饭和接听电话。

对于单核系统,并发意味着线程交替执行,而对于多核系统,并发即是并行。现代cpu通常对于计算核进行改进,以使得每个计算核可以并行多个线程,如6核12线程,那么每个计算核都可以并行12个线程。而并发则无线程上限,因此不是同时执行。

1.5 并行类型

数据并行:多个线程执行相同任务,将数据分为几组分别在不同线程上进行操作。

任务并行:多个(任务)线程执行不同的操作,分别在不同线程上运行。

1.7 多线程模型

1.7.1 用户线程与内核线程

用户线程:用户层中的线程,管理无需内核支持。

内核线程:内核层中的线程,由操作系统来支持和管理。

用户线程必须通过一定方式映射到内核线程上。

1.7.2 多线程模型分类

一对一模型:一个用户线程映射到一个内核线程上,优点是可以提高系统的并发性,因为当一个线程阻塞时,可以运行其他线程。但是不能创建太多线程。

多对一模型:多个用户线程映射到一个内核线程上,优点是可以创建多个用户线程,缺点是不能提高系统的并发性,因此内核线程一次只能调度一个用户线程。

多对多模型:多路复用用户线程到同样数量或更少数量的内核线程。既可以提高系统的并发性,又可以创建多个用户线程。

1.8 多线程创建策略

异步线程:父线程创建子线程后,父线程恢复自身运行,父线程与子线程相对独立,线程间很少有数据共享,因而父线程不需要知道子线程何时终止。

同步线程:父线程创建子线程后,进入等待状态,直到父线程的所有子线程终止,才恢复运行。

2.多线程设计方法

2.1 多线程策略

多线程带来的问题:在处理并发时,通常采用一个新线程去处理并发的每个任务。这将带来两个问题:1.新线程的创建需要时间,并且当完成任务后&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值