linux 多线程(1)

本文介绍了Linux下的多线程概念及其与多进程的比较,详细讲解了线程创建、线程退出、线程等待和线程分离的过程,并通过C++代码示例展示了线程的创建和管理。在Linux中,线程是CPU调度的基本单位,通过线程可以实现更细粒度的并发控制,但也需要处理线程安全问题。
摘要由CSDN通过智能技术生成

多线程

越深入的学习之后,经常能听到这么一个词----多线程。之前的学习经常会提到多进程,父进程在忙不过来的情况下,会创建子进程进行帮忙,这样就是一个多进程的任务。那么什么是多线程呢?

线程概念

在传统的操作系统中,进程就是一个运行中程序的描述信息----pcb,控制程序的运行。

在Linux操作系统下,pcb是进程,因为Linux下线程是以进程pcb模拟实现线程;也有人称为轻量级进程。但是Linux下没有为线程设计一个pcb来控制线程的运行。

线程1

上图介绍了线程组是个什么组合。

线程组理解

进程就是线程组,包含了一个或多个线程

从上图来看,Linux线程是PCB,因为CPU调度程序运行是调度pcb,所以线程是CPU调度的基本单位。

因为进程是线程组,程序运行时,资源是分配给整个线程组的,因此线程是资源分配的基本单位。

vfork()创建一个子进程共用同一个虚拟地址空间,怕出现调用栈混乱,因此子进程运行完毕或者程序替换后父进程才开始运行。

多线程和多进程的比较

多线程和多进程都可以并行多任务,那么哪个执行起来比较好呢

从线程的角度来看,优点:

1、一个进程中的线程共用同一个虚拟地址空间

2、线程间通信更为方便

3、线程的创建/销毁成本更低

4、同一个进程间的线程调度成本要更低

5、执行力度更加细致

缺点:

线程缺乏访问控制----健壮性低。

比如exit(),异常针对的是整个进程,进程退出,那么线程也就不存在了。这样的话线程的可控性比较低

共同优点:都可以并发/并行处理任务,提高处理效率

多进程/多线程进行多任务处理的优势体现与细节:

CPU密集型程序:程序中都是大量的运算操作

IO密集型程序:程序中都是大量的IO操作

共同缺点:对临界资源操作需要考虑的更多,编码更加复杂

线程创建,线程终止,线程等待,线程分离

先回顾一下进程创建。在之前的总结中我们通过fork()函数和vfork()函数创建子进程。

  • fork 是 创建一个子进程,并把父进程的内存数据copy到子进程中。

  • vfork是 创建一个子进程,并和父进程的内存数据share一起用。

    这两个的区别是,一个是copy,一个是share。

    fork函数是在父进程执行到子进程创建的位置,将内存数据拷贝进入,等待子进程执行,子进程执行完后,退出后父进程在继续执行。

    vfork函数是保证子进程先执行,当子进程调用exit()或exec()后,父进程往下执行

操作系统并没有为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值