c++主线程等待子线程结束_Python中的多线程

本文介绍了线程的概念,强调了线程在进程中的角色和资源分配。线程共享内存,允许多个任务并发执行,但也可能导致线程安全问题。在Python中,可以通过threading模块方便地创建和管理线程,线程的同步可以通过互斥锁实现,以确保数据正确性。此外,讨论了线程的五种状态和死锁问题,以及同步和异步调用的区别。
摘要由CSDN通过智能技术生成

多线程

•线程:实现多任务的另一种方式

•一个进程中,也经常需要同时做多件事,就需要同时运行多个‘子任务’,这些子任务,就是线程

•线程又被称为轻量级进程(lightweight process),是更小的执行单元

一个进程可拥有多个并行的(concurrent)线程,当中每一个线程,共享当前进程的资源

一个进程中的线程共享相同的内存单元/内存地址空间——>可以访问相同的变量和对象,而且它们从同一堆中分配对象——>通信、数据交换、同步操作

由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快

线程和进程的区别:

•进程是系统进⾏资源分配和调度的⼀个独⽴单位

•进程在执⾏过程中拥有独⽴的内存单元, ⽽多个线程共享内存, 从⽽极 ⼤地提⾼了程序的运⾏效率

⼀个程序⾄少有⼀个进程,⼀个进程⾄少有⼀个线程

(程序要运行,实际上是线程在运行,进程用来给线程分配资源)

(进程占的是内存,线程占CPU资源)

•线程是进程的⼀个实体,是CPU调度和分派的基本单位,它是⽐进程更⼩的 能独⽴运⾏的基本单位

•线程⾃⼰基本上不拥有系统资源,只拥有⼀点在运⾏中必不可少的资源,但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源

•线程的划分尺度⼩于进程(资源⽐进程少), 使得多线程程序的并发性⾼

•线程不能够独⽴执⾏, 必须依存在进程中

线程和进程在使⽤上各有优缺点:线程执⾏开销⼩,但不利于资源的管理和保护;⽽进程正相反

(为什么说不利于资源的管理和保护?例如:对于同一个变量,两个线程都可以操作,线程1把变量改为10,线程2 把变量改为20,那么最后这个变量的结果是什么?我们不知道,因为我们不能确定是线程1先执行还是线程2先执行,这是由系统调度实现的)

b7d000c3209fdc7b465ce4b8ec3a3be1.png

一般来讲,我们把进程用来分配资源,线程用来具体执行。(CPU调度)

•python的thread模块是⽐较底层的模块,在各个操作系统中表现形式不同(低级模块)

•python的threading模块是对thread做了⼀些包装的(封装), 可以更加⽅便的被使⽤(高级模块)

•thread 有一些缺点,在threading 得到了弥补,所以我们直接学习threading即可

import threading
if __name__ == '__main__':
    #任何进程会默认启动一个线程,这个线程称为主线程,主线程可以启动新的子线程
    #current_thread()  返回当前线程的实例
    #.name  当前线程的名称
    print("主线程%s启动"%threading.current_thread().name)#此处没有创建新的线程,返回的也就是主线程的名字
import threading,time
def saySorry():
    print("子线程%s启动"%t.name)
    time.sleep(1)
    print("我错了")
if __name__ == '__main__':
    print("主线程%s启动"%threading.current_thread().name)
    for i in range(5):
        t=threading.Thread(target=saySorry)#创建了一个子线程  T
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值