无题 |
---|
三载辛苦缘离别,今兮说与山鬼听。 |
惊觉山鬼不识字,西风难寐不动情。 |
前言:
✌ 作者简介:渴望力量的哈士奇,大家可以叫我 哈士奇 。(我真的有一只哈士奇)
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
系列专栏:
Python全栈系列 - [更新中] 【 本文在该系列】
Python零基础入门篇
Python语法进阶篇
网安之路系列
网安之路踩坑篇
网安知识扫盲篇
Vulhub 漏洞复现篇
Shell脚本编程篇
Web攻防篇 2021年9月3日停止更新,转战先知等安全社区
渗透工具使用集锦 2021年9月3日停止更新,转战先知等安全社区
⭐️ 点点点工程师系列
测试神器 - Charles 篇
测试神器 - Fiddler 篇
测试神器 - Jmeter 篇
自动化 - RobotFrameWork 系列
自动化 - 基于 JAVA 实现的WEB端UI自动化
自动化 - 基于 MonkeyRunner 实现的APP端UI自动化
大家好啊,我胡汉三又回来了。 Python零基础入门篇 已经结束,接下来我们即将开始 Python语法进阶篇。该阶段我们主要围绕 多线程编程
、正则表达式
、以及我们将会有一个 抽奖的实战练习
。
接下来我们就要开始学习 多进程与多线程
了,关于这一块的知识点,其实是有一点的难度的,不过我会尽量使用简单的入门浅显的方法去阐述这部分内容。
首先要做的就是先要了解 什么是多进程与多线程?进程与线程之间的关系是什么?在实际的场景中它们又是如何应用的。
在概念上有了一定的了解之后,我们就可以利用 Python 中的模块学习如何在 Python 中创建和使用多进程与多线程。在这个过程中,我们还会学习 进程与线程
关于 池
的概念,除此之外我们还会学习 进程与线程的锁的概念
。为什么会有锁?如何使用锁?在后续的章节我们也会讲到。
最后,我们还会了解一下 Python 中线程的一些特殊性。(这是概念上的内容,理解就好。)
在正则表达式章节同样也是从概念上作为入手,然后整体的了解一下 正则表达式的使用方法
。当有了一个使用概念的时候,我们会学习与之有密切关系的 匹配字符与特殊字符
。当了解了这些内容之后,我们再去学习 正则表达式模块中的常用函数
。正则表达式也是有一定的难度的知识,它的难点主要是它的灵活多变,关于这一块一定要认真才行。
接下来就是我们的重头戏,综合项目实战。我们的主体将会是一个通过命令行的方式执行一个抽奖的操作。
接下来我们将进入一个全新的阶段,关于进程、线程与异步的相关知识。了解了进程、线程和异步的相关知识后,可以大大的提高我们程序的执行效率。这方面的知识其实是开发中比较难以理解的,作为初学乍道我们不会深入的对它们进行研究。但希望通过该章节的学习,希望大家能够知道进程、线程是什么。异步又是怎么一回儿事儿,以及它们基本的使用方法和特性。
今天这部分章节没有代码相关的知识,因为在这之前我们先来了解一下什么是进程。
其实进程一直都贯穿着我们的周围,无论是我们使用的智能手机还是电脑,其实都与进程息息相关。比如我们打开某短视频软件,其实就是打开该短视频的一个进程。我们甚至可以说进程就是一个软件的本身,再专业一些的话就是 进程就是程序执行的载体
。
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个word就启动了一个word进程,打开两个记事本就启动了两个记事本进程。
那么怎样的任务才算是一个进程呢?当一个任务被开启后,操作系统会分配它所需的系统资源,包括内存,I/O和CPU等,如果系统资源不够,则会出现系统崩溃,这样的任务可被称为进程。
在我们的实际生活中,当我们打开一个浏览器的时候,又或者打开一个游戏的时候;或者我们平时打开的QQ或者微信。当我们双击去启动他们的时候,其实执行的都是一个个的进程。只不过每个进程都有它们各自的名字而已。
所以我们打开的每一个软件(或者游戏),甚至我们之前执行的每一个 Python 脚本都是启动一个进程,而软件(游戏、脚本)就等于我们说的进程。
我们的进程(或者说软件)要想能够成功的执行启动,其实是需要能量的。人类要想精力充沛,充满能量就需要吃饭。而进程也是一样的, 它们的口粮就是 CPU 与 内存
。不同的程序根据执行的业务场景、强度的不同,对于 CPU 与 内存的需求量也不近相同。就好比是强壮的人和娇小的人饭量要大一些一样… 同样的道理。
每一个软件启动之后,都是启动一个进程。我们拿手机来举例,在多年以前的时候。我们的智能手机还没有那么的先进,每次我们只能打开一个软件。当我们需要打开另外一个的时候,需要先将当前的软件关闭,才能打开另外一个软件。
比如我们用的苹果手机,在4代之前都是如此,每次只能启动一个线程(即每次只能打开一个软件),这种每次只能启动一个软件的系统,我们称之为单进程系统。
但是现在已经不一样了,我们可以在我们的智能手机中一次性启动多个软件,比如打开微信、QQ或者手机浏览器,它们之间实际上是互不干扰的。
虽然有可能会退到后台,但是它们依然会在后台运行,保持持续工作。比如我们可以打开网易云音乐,一边听着音乐一边在我们的微信上聊天。 启动众多软件的主角就是我们刚刚说的系统,所以相对于这些我们启动的软件来说,系统就是所有软件的父进程,也叫做主进程。而相对于系统这个主进程来说,所有的由它创建的软件的进程就是子进程。
让我们来总结一下多进程,多进程就是可以同时启动多个进程。这些进程都是在执行程序,但是它们互不干扰各自执行自己的业务逻辑。我们可以在一个系统中创建多个进程,每个进程是不同的身份,比如它们是QQ、是微信… 但是相对于一个软件来说(我们拿微信来举例),它在执行程序的时候,也可以再次启动多个进程。比如一个进程帮助我们接收最新的聊天消息,一个进程帮助我们接收朋友圈的最新消息,它们都是由微信这个主进程创建的子进程。所以我们也可以在我们创建的 Python 脚本中创建多个子进程,我们依然可以做一个相关关联。我们的 Python 脚本就相当于微信这个软件,而脚本就相当于主进程;由脚本中创建的新的进程就相当于是我们脚本的子进程…(脑袋炸了…绕的很…)
接下来我们看一下多进程与并行的概念图
前文我们提到过,CPU 与 内存 是进程的口粮。其中的 CPU 不仅仅可以想象成是粮食,也可以理解为是跑道。我们创建好的进程会在 CPU 创建好的跑道上执行运行,我们电脑中的 CPU 是有很多个核心的。上图中的最顶部是 CPU,这个CPU下有四个核心(我们可以认为是4个跑道),当进程被创建之后它就会去找是否有空闲的跑道,当发现有空闲的跑道就会跑进去执行。我们可以看到上图中 3 CORE
这个跑道有两个进程都选择了它,它们会先后进去执行。我们把多进程在不同的多个内核中执行叫做 '多进程的并行处理'
。
以上内容就是我们今天所要了解的进程与多进程相关概念。什么是进程、以及多进程又是怎么回事儿。多个进程在执行的时候相互不干扰、同时工作,可以大大的提高我们的效率。这很好理解,如果我们同一时间只能做一件事情,那我们很有可能就会消耗很多时间。这种一件件来处理工作的方式我们通常称之为 "串行工作"
。而 "并行工作"
也就是同一时间处理多个事情,必定会缩短我们的工作时间,提高我们的工作效率。
当然,每个进程都需要消耗一定的 CPU资源与内存 ,进程开的越多,对我们的 CPU 与 内存 的依赖也就越多,这也是 进程的一个负面因素。这也不是一个问题,后续会告诉大家如何防止多进程吃垮我们的内存和CPU。