多线程(一)

目录

一丶线程的概念

1丶多线程的用途

2丶多线程优缺点

1丶优点

2丶缺点

 二丶线程的特性

三丶线程简单控制

1.线程的生成

2.线程等待

 3.线程终止

4.线程分离


一丶线程的概念

        多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” [1]  。

1丶多线程的用途

  • 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”
  • 一切进程至少都有一个执行线程
  • 线程在进程内部运行,本质是在进程地址空间内运行
  • 在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化
  • 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流

使用我们自己术语是怎么理解多线程~比如我们在再APP商店下载一些软件,这些软件可以同时被下载,而不是一一等待着这个软件完成后再执行另一个下载。我们在打游戏的时候,你在刷野怪,你在打野怪的同时你自身在掉血,野怪也在掉血你同时又用了一个药水,你的血量又加上来了。想象一下这些场景是如何在一个时间线内完成的。这里就多线程并发完成的~

 

这是我们之前学习进程总会用到的一张图。多线程的生成就是基于在进程之上。假如我们又创建一些进程, 但是并不创建地址空间只生成task_struct 然后共用一个地址空间。那么这些新被创建的“进程”就是所谓的线程。

Notice:linux操作系统下没有线程概念,都是进程模拟出来的,一个线程内部包含多个线程。所谓的就是进程生成了多个(TCB)多个执行流这里叫作线程控制块,分别去完成不同的任务。 

这里cpu虽然看到的还是task_struct.但是这些结构体都要比进程更轻量化了。

所以说线程是比进程更细的的执行流 

2丶多线程优缺点

1丶优点

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

        在创建进程的时候,就需要创建相应的进程地址空间,页表,加载相应的代码和数据;而创建线程只要创建一个PCB,分配进程的资源即可;

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

        线程之间的切换,只需要切换线程的上下文,不需要更新页表,加载有效数据;

3.线程占用的资源要比进程少很多

        线程本身就不是主要申请资源的角色,只是分担进程的资源;

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

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

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

        计算密集型应用:比如加密、大数据运算等,主要使用的是CPU资源;贴合实际情况,比如我们经常用的好压,你解压一个文件,它就要涉及到大量的解压算法;

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

        I/O密集型应用:比如网络下载、云盘、ssh、在线直播、看电影等,主要使用得到是内存和I/O资源;

2丶缺点

性能损失

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

健壮性降低

  •         编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。比如:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值