进程与线程


前言

对进程和线程之间看了多个视频后,对进程和线程有了一定的认识,以下有大量的举例帮助你理解


提示:以下是本篇文章正文内容,下面案例可供参考

一、概念

1.基本概念辨析

进程是代码加资源,点击运行代码时候就会生成一个进程。而进程不是具体执行的单位,线程将会对进程中的代码进行一步步地执行。一般来说只有一个线程,执行整段代码,也可以有多线程,执行代码的不同部分的功能。
线程从属于进程
协程是一种可以自由地在执行时退出,并记录上下文的线程。

2.进程,线程通信

多线程通过全局变量进行通信。
多进程通过消息队列等,也就是共享的一个队列或者类似于全局变量,多个进程都可以访问到的东西来进行通信。
多进程也可以通过socket进行通信

3.进程,线程池子

进程和线程在创建和销毁的时候会耗费一定的时间,不如先初始化一定数量的进程和线程,在需要用的时候直接用即可。这样可以预防线程无限制地创建,可能导致系统崩溃。

二、例子

1.线程

例1:比如,生产者与消费者,生产者是一个线程,消费者是一个线程,他们通过共享的变量—仓库进行通信,生产者生产一个,仓库存储量增一,消费者才能从仓库存储量里买一个,仓库存储量减一。生产者和消费者对仓库存储量的访问是互斥的。

例2:比如,QQ音乐中的下载音乐和播放音乐是两个线程,下载音乐下载后的数据,放入一个共享变量中,同时播放音乐从这个共享变量中取出下载音乐存入的数据进行音乐的播放。播放音乐和下载音乐对这个共享变量的访问是互斥的。如果下载音乐没有下载一点数据,则播放音乐也无法取出一点数据。这就实现了下载音乐和播放音乐的通信,也就是下载音乐没开始,则通过对共享变量的判断,播放音乐也没开始。

例3.比如,下载数据和播放音乐是两个进程。下载数据功能的输入有q队列。下载好的数据放入q中,q作为播放音乐的输入参数输入。(共享变量的方法有利于解耦,比如多个进程要加一个进程在通信里面增加功能,直接输入队列q即可,删除功能也是,不会对其他进程进行影响)

2.进程plus线程


这个上面的箭头就是一个个线程,test1是一个线程,test2是一个线程。start是一个线程。其中如果multiprocessing.Process()这个方法被调用的话就会开辟一个进程执行这个方法的代码


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值