Linux——多线程的初识

作者 :小 琛
欢迎转载,请标明出处

多线程的意义

我们编写的程序,一个程序执行起来,就不单单只有main()函数一个执行流,而是进程中有多个执行流,这些执行流在运行的时候,可以在同一时间拿着不同的cpu进行运算(执行代码),即一个并行的状态运行。因此程序的执行效率就得以大大提升

例如:我们执行一个从算法,将int arr[1000]这个数组中的每个元素都相加。

常规思路就是arr[0]+arr[1]+arr[2]+arr[3]…arr[999],那么多线程编程就是将arr[1000]分成若干组,例如分为两组。第一组执行arr[0]+arr[1]+…arr[]499],另一组执行arr[500]+arr[501]…arr[999],而这两组是并行的(同一时间进行),那么我的运算效率就会直线提升,这就是多线程编程的逻辑
在这里插入图片描述

从内核解析多线程

对比子线程和子进程

1、创建子进程
fork():在内核中以父进程的PCB为模板拷贝创建一个新的PCB,该PCB被内核使用双向链表管理
2、创建子线程
pthread_creat():在内核中创建一个PCB,PCB指向父进程的虚拟地址空间,内核创建出来的线程,在虚拟地址空间当中的共享区开辟一块内存,保存该线程独有的东西
3、pid和tgid
我们所说的在PCB中的变量pid就是线程id,而对于进程来说,其进程号保存在tgid中。
pid(process ID):轻量级ID,线程ID
tgid(thread group ID):线程组ID,进程ID

举例理解:
现在有一个生成口罩的工厂,该工厂就是一个进程。工厂内有若干条生产线且可以同时进行工作。即该进程有多个线程可以同时进行运算,每一条生产线就是一个线程,则工厂的生产量就是若干条生产线的和。该工厂的每一条生产线都有独特的名字即各自的pid,该工厂的总名字就是tgid,当该工厂只有一条生产线的时候,tgid=pid
在这里插入图片描述
4、多线程和多进程的区分
多进程:每一个进程都有自己独立的虚拟地址空间,多进程的特定独立性也是这个原因。一个进程的崩溃并不会影响另一个进程,多进程也可以提高效率,但是会带来通信的问题
多线程:每一个线程(执行流)共用一个虚拟地址空间,因此一个线程的异常就会导致整个程序的退出

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值