【相关文章】一文秒懂多任务

一、进程,线程和协程

对于进程来说,每个进程之间都有自己独立内存空间,运行的时候互不影响(但是主进程结束,子进程会跟着结束),进程是并行(这个还需看你电脑CPU的核数,如果说,你电脑的CPU是单核的,那你的电脑怎么都不会产生并行,当你电脑的CPU核数大于等于你的进程数的时候,这是你电脑中的进程就是并行),线程的话一般情况下是并发的,(如果说我们的电脑是四核,我们只开启了一个进程,这个进程中只有一个线程,那么这个线程就是并行,但是一般情况下一个电脑不可能只开启一个线程.).

线程的资源是共享的正因为是共享的,才会出现多线程共享全局变量是带来的问题,因此也就需要全局解释锁来解决这个问题,但是全局解释锁又会引出新的问题,那就是当一个程序中有两个互斥锁的时候,如果使用不当,就会出现死锁状态,因此,需要我们去重构代码或者添加超时间来解决这个问题(银行家算法).

协程的话,它是一种轻量级的线程,它是通过自身携带的上下文管理器实现数据的存储的,底层是用生成器实现的,也就是说,两个协程之间转换的时候,因为是生成器实现的,通过yield来记录上一次的执行结果,这个执行的时候不会从头执行,会在它上次执行的地方开始执行,一个协程运行的时候,另一个协程是不会执行的,如果说该协程出现了耗时操作,那么它会通过monkey.patch_all()来进行协程之间相互的切换.

二、形象的比喻

CPU就相当于一个工厂,一个工厂有多个车间,每个车间就相当于每个进程,如果这个工厂的电力不足,只能供一个车间享用,相当于单核CPU,每个车间是独立的,互不干扰,就好比是进程的资源是独立的,车间中的每个人就相当于每个线程,每个线程共享车间中的东西,但是每个人也有自己的任务,就相当于线程的资源是共享的,但是他们又各自有自己的任务.我们可以把一个人的任务分批段来执行,如果这个人要烧水,要洗菜,那么烧水的时候就相当于是阻塞状态,这是我们可以切换到洗菜状态,等水烧完了后我们就可以做饭了,这要比等水烧完了之后再来洗菜要节约时间的多,烧水的时候就相当于是超时操作.

三、并行和并发

  • 并行就是多个任务在同一个时间点同时执行.
  • 并发就是多个任务在某个小的时间段内单步执行.
  • 有一个很宽的车道,同时可以通过好几辆车,每个车道之间互不影响,这个可以看成是并行;
  • 有一个很宽的车道,同时可以通过好几辆车,但是某一处由于山体滑坡,被堵住了,这能通过一两车,那么这个就叫并发.

并发,并行:

  • 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。----------串行
  • 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
  • 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
  • 并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力

四、线程中的全局变量共享问题

  • 有一个话筒,我们可以看做是A和B共享的全局变量,因为是共享,每个人都有使用的权利,当A说话说到一半的时候(A说:A喜欢吃)B也要抢着说,这时B说:"屎",A又抢着说了"......",这时候连起来就是:('A喜欢吃屎......'),哈哈哈,这就是线程中共享全局变量带来的弊端,也因此需要全局解释锁来解决这个问题.

五、异步和同步

同步就是有序的进行;异步就是彼此各自执行各自的,互不影响.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值