多进程,多线程,协程,锁,线程池 概述

前言
为什么我要写这篇文章呢,因为在我深入学习进程和线程这一章以前,我也是对于这个概念含含糊糊,知其然不知其所以然,我要告诉大家一个道理,会用和知道在特定业务场景下使用哪种合适是两回事,并不一定用了就会节约时间的噢

进程,线程

进程:资源分配的最小单位
线程:CPU调度的最小单位

相信这两个概念大家都有所了解,但是有没有想过,什么是资源分配,什么又是CPU调度呢,我想给大家白话文的翻译一下我的理解

资源分配:主机有一块内存,我一共就单核的1个G这麽大,这时候,我同时开了QQ,微信,微博和CSDN,每一个软件在你启动它的那一个,就在这个1G内存空间内占用了一块空间,这个内存就是总的资源空间,每一个启动的软件就是一个进程

CPU调度:我想用QQ发一条信息给别人,这个时候说明我在用QQ了,它不是闲置状态,那我用QQ的这个过程,这个命令谁来执行呢,内存将这个命令发给CPU来执行,这个过程就叫做CPU调度

那问题来了,为什么都是最小单位呢,有没有考虑过?

我刚才上述的解释中,有提到过,内存的资源中只要有一个软件启动,就占用了一块资源且是一个进程对吧,那很好理解,软件是进程,那它不就是最小的资源分配单位嘛,那为什么线程不可以呢,因为
线程是依托进程产生的噢,我都没有进程,能有线程嘛,对吧,所以当任务执行的时候,其实就是CPU去调你进程(软件)里一个线程(发消息)的过程,希望大家结合我如此白话的解释,好好理解这两句的意思噢。

下面给大家说一下几个进程和线程的特点,因为属于硬性知识,所以大家先记住,在去理解它

进程线程
进程间信息不互通,需要通过IPC进行通信进程内的线程数据共享
进程资源销毁和切换复杂线程销毁和切换很快,CPU利用率高
进程间不会因为一个进程崩溃而影响另一个线程一个崩溃,进程都会崩溃
进程适合大量逻辑计算的业务(数据计算和解析文件)线程适合存在大量IO产生的业务(读写数据库和读写文件)

知道了进程和线程以后,相信大家对于这两个概念有了相对理解咯,那么下面要进行多进程和多线程的理解咯,多怎么说,字面意思,多个进程一起跑或者多个进程一起跑咯,其实在我们的开发业务中,往往并不是只用多进程或者只用多进程,比如现在有一个批量文件上传解析并且处理数据存入数据库的请求,如何处理呢,需求很简单,但是别忘了我说的这个是批量哦,也就是很有可能成百上千的文件,根据上面的进程和线程的特点,我想可以这么做

多线程接口进行文件的IO读取操作,并且将读取就绪的文件指令发送给消息队列,消息队列接收到指令,由进程的接口接收并且进行文件解析,这个解析其实更多的是处理数据,然后处理完成以后,将数据整合好生成sql指令,传给消息队列,由下一个多进程的接口接收消息队列的指令,然后进行数据库的IO操作,当然这个是理想化的需求设计简述,中间可能对于消息队列的选择,线程进程的设计,几个生产者,几个消费者都需要细致思考

上述的业务场景更多的是想告诉大家一个道理,根据进程和线程的特点去选择最合适的技术,不同的业务进程和线程效率都是不同的噢。

协程

协程本身非常轻量级,是基于线程产生的,不受操作系统的操控,没有线程切换的开销,它的终止和开始都是由程序控制的,在线程内启动多协程,可以最大程度提高CPU的效率,并且它不会受锁的干扰噢,在python中协程比较受限,只可以在支持协程的模块内使用

线程锁

进行多线程的过程中,假如有一个地方,涉及到金额计算,本来大于200的金额才有满减,但是同时有两个线程在判断之前就进来了,导致金额被减了两次,赔钱了,这就尴尬了,这个时候有人就说,那加个锁吧,谁先处理谁先上锁,等处理完锁打开,下一个才可以进来,就这样线程锁的概念出现了,处理之前先上锁,锁住后,其它线程进入wait阶段,等当前线程处理完毕以后,才会进入判断(当然加锁的地方不可以太大,最好就是核心受影响的逻辑,不然很可能多线程无限接近单线程噢)

线程池

依旧是白话解读概念,我有一个需求,需要在每天调用频繁线程,这个时候我每访问一次,系统就创建出线程来处理,等处理完在销毁掉,假如要访问1w次,那我时间一半不都浪费在创建销毁线程上了嘛,那有什么可以把线程创建好,一直准备就续呢,等处理完在继续进入就绪状态,这个时候线程池的概念就出来了,它的作用呢,其实就是将多线程在线程池中准备就绪,随时准备处理业务。

本章着重给大家介绍的就是进程,线程,协程,锁和池化概念,希望大家先理解消化,这一节将介绍用python实现这些技术

注:欢迎大家沟通学习,可以但不限于Web,数据结构,操作系统,数据库,中间件等知识

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值