Standalone原理讲解与实操演示

这课的一个学习的话,我们基本上了解了flink对不同的一个集群资源管理器上的一个支持,以及我们的一个net ude部署模式上面的一个特点的一些个了解。通过本课的学习,我们将去逐步去了解一下flink on standard allow的这种集群部署模式上面的一个原理,以及相应的这样的一个集群的一个部署的一个实践。首先我们来看一下standalone的这种集群部署模式的话,它的一个集群的一个特点是什么样的?对于我们standalone的这种集群部署的话,其实我们可以从图里面看得到。我们的一个flink的一个当我们这样的一个集群去启动的时候,它其实对于我stand alone的这样的一个集群里面的话,它同时也会启动我们对应的这样的一个master的一个进程,以及我们对应的这样的一个task是worker节点。

对于我们刚才其实在上节课里面已经讲到,对于我stand alone的这种集群的话,它其实仅支持30的这种模式。30模式的话,其实最大的一个特点的话是对于我们master的这样的一个节点的话,它其实可以去启动多个这样的一个job manager。也就是说我们客户端这边的话,可以去提交多个这样的一个job graph的一个对象,去提交到我们的一个这样的一个job manager的这样的一个进程。也就是master进程里面了之后,然后去启动相应的这样的一个计算的一个资源。然后同时去把作业去提交到对应的这样的一个task manager上面去。对于我们在standard load集群上面可以去支持多个这样的一个master进程的一个储备的一个配置。也可以去启动对应的这样的一个stand bar的一个master process。然后跟我们的这样的一个master process之间进行这样的一个储备,也就形成一个这样的一个高可用的一个配置。

另外一个的话,我们对于我们的一个standard load集群的话,它其实是可以去部署在的一个单机的。单机的话其实就是把我们的一个master的一个进程和我们的一个task manager的一个进程部署在一台机器上面,我们叫做单机的一个部署。当我们把master节点和我们的task manager节点部署在很多台节点上面的时候,我们叫做多机部署。

对于我们这样的一个standard low的一个集群部署来讲的话,它其实依赖于我们java的一个GDK的一个环境。也就是说我们需要在我们每台的这样的一个物理机上面,或者在我们的虚拟机上面去安装相应的这样的一个GDK的一个运行的一个环境。目前来讲的话,是支持我们的一个GDK8和GDK11这样两个版本的一个GDK。

我们首先来看一下standard low的这种模式的话,我们的一个单机部署。单机部署的话,刚前面已经提到,我们把job manager跟我们的task manager如果去部署在我们的一个节点的话,其实就是一种单机部署的一个模式。它可以去支持linux mac的OS上面去部署,以及我们windows机器上面。你可能是需要去安装像类似于WSL的这种环境。然后另外的话也是依赖于GDK8,然后GDK11的这样的一种环境。

对于我们单机的这样的一个standard low的集群来说的话,它其实仅适合于本地的一些测试的一些工作。它并不适合于投入我们的一个生产环境去相应的这样的一个应用。另外一个的话,我们在standard low的单机部署模式里面的话,是不支持高可用的。其实在单机部署模式上面,其实支持高可用可能也没有太大的意义。因为如果当前的这台机器如果全部挂了,它其实整个的机群都其实属于一个不可用的一个状态。我们来看一下standard law的这样的一个单机部署模式的这样的一个它的一个部署的一个步骤。首先我们其实可以看得到,对于我们在这样的一个单机部署的时候,standalone的单机部署的时候,它其实是有啊其实有以下这样的一个三个主要的一个步骤。

第一步的话,首先用户这边的话去下载相应的这样的一个安装包,或者说我们可以通过。源码去编译生成相应的这样的一个,也就是我们的一个二进制的一个安装包。这个的话其实是我们在这里提供了相应的这样的一个下载的一个链接。对于linux如果是主机,如果能联网的话,它可以通过we get的命令,可以直接去获取我们对应的最新的flink 1.1的这样的一个安装包的一个版本的一个下载。下载完成了之后,我们通过去解压我对应的这样的一个安装包,解压到对应的安装路径里面。然后下一步的话,其实我们只要进入到我对应的安装包的一个路径,然后再去执行一个start class这样的一个命令,就能够完成对应的这样的一个集群的一个单击的一个启动。

另外一种的话,对于我standalone的这种部署模式的话,它其实是就是在多机部署的时候,它其实相对来说单机部署会有很多的一些要求。在我们的多机部署上面,我们可以看得到,比如说我们对于我的这样的一个群里面有5台节点。我们是node 01、node 02、node 03、node 04以及node 05。我们在node 01这样的一个节点上面去部署它的一个job manager的一个节点。我们在其他的节点上面去部署我们的一个task manager的一个实例。

同样的,我们在部署之前都有相应的这样的一些前置的一些条件。首先我们每台节点上面都必须得安装一个GDK,同时我们要去配置一个java home的一个路径,另外一个的话,如果需要去使用我们的一个HDFS的话,那么HDFS的话需要我们在每台节点上面也要配置我们的hadoop config DR的这样的一个环境变量。这个环境变量的话是需要去在我们的每台主机上面都要去配置。

另外一个的话,我们在每台节点上面安装了一个flink的已下载的安装包的路径,它必须得保持一致,且版本是要保持一致的。也就是说我们在node 01上面的一个,比如说一个安装的一个路径里面去安装我们的一个flink的一个安装包。同时在其他的节点的同样的一个路径里面,也同时需要去安装对应的版本的一个安装包。其实另外一种的话是最好是选择一台机器跟其他的机器之间SSH能进行一个打通。这个过程的话其实是为了去方便我们对应的这样的一个相应的这样的一个安装包的一个传输和相应的这样的一个远程的一个通信。

对于我部署的一个节点的话,我们刚才其实看到了这样的一个部署。Node 01去部署job manager,然后其他节点去部署我们的一个task manager OK。在我们的一个多机部署里面的话,其实会涉及到修改几个主要核心的一些配置。这里面的话我们会提到一个在flink首先我们需要去修改flink conf里面的ym里面的文件配置文件。我们需要去配置我们的一个job manager的一个RPC的一个address。如果是比如说他是在我们的照manager,是在我们的一个node 01的这样的一个节点的话。那么这个地址的话是需要修改成node 01的这样的一个host name,或者说它的一个IP地址。

另外一个的话,其实我们要去修改我们的一个master的一个文件。我们设定我们的一个master节点,为我们的一个node 01的这样的一个节点。另外一个的话就是修改我们cop路径下面worker这样的一个文件的一个配置。这个配置的话,它其实指定的就是我们worker点的一些地址。比如说node 02、030405这几台节点。

最后的话,我们将我们修改的所有的一些配置文件,需要去同步在我们的每台节变的flink安装路径的conf路径下面。也就是说所有修改的这样的一配置文件需要保持在每台机器里面,都要有相应的这样的一个同步。接下来的话,我们就把standard low的这样的一种集群部署模式进行相应的这样的一个实战的演练。接下来我们就具体看一下这个flink on standard load这样的一个集群部署模式,分别为单机部署以及多机部署的一个实战。

首先我们来看一下单机部署。我们对于我们一共有5台节点,比如说node 01,node 02,那0304这5台机器。我们已经在这5台机器上面已经下载好了对应的这样的一个flink集群安装包。同时我们在这样的一个环境里面,已经配置了对应的这样的一个GDK的一个环境,是1.8的这样的一个环境OK。基本上就符合了这样的一个集群的一个安装的一个要求。下面的话我们比如说我们解压我们的1.11的这样的一个flink的一个安装包。我们通过这种方式的话,我们需要去解压一下。

OK我们下面一步的话,我们其实直接进入到我们的一个flink的一个安装路径里面来去看一下。它这里面我们大概介绍一下,它里面有的话有几个主要的一个文件夹,并目录的话是存放了所有的跟flink集群启动以及job提交相关的所有的一些可执行的一些脚本。这些脚本的话就负责去启动对应的这样的一些作业,或者说启动对应的这样的一个集群。对于康复路径里面来讲的话,它存放了所有的一些flink集群,以及它运行时所需要的一些配置文件。最主要的一个核心的一个配置的话就是我们的一个flink conf yum这样的一个配置文件。还有其他的像log ford以及log back的这样的一些日志的一些配置。还有就是我们的一如果在standard load这样一个集群模式下面,它的一个master节点以及worker节点的一个配置。当我们后面会讲到circle的这样的一个章节的时候,有一个circle clan的这样的一个模式运行的时候,会用到circle client这样的一个ym的一个配置。

当我们如果使用到了flink集群里面自己带的这样的一个足KP的一个集群的话。我们可能是需要去对zookeeper点com的这样的一个文件进行对应的这样的一个配置。我们首先来看一下flink come Young这样的一个配置文件的话,我们可以看得到它里面的话是需要去注意几个地方。一个是drop manager的一个RPC house,它是客户端和我们的这样的一个服务器之间进行通信的一个RP的一个地址的一个指令。另外它也有一个6123的这样的一个RPC的一个端口OK。那我们看一下master的这样的一个配置文件里面的话,当前仅有这样的一个look host的这样的一个配置OK然后在下面的话我们看一下worker的这样的一个配置里面,也同样是我们的一个local host。这样的一些信息的话,基本上不需要做任何的这样的一个改变的话。

我们可以去直接去调用我们的一个病目录里面的一个start cluster的这样的一个组件的一个脚本。我们通过调用的这样的一个脚本的话,我们可以看到已经确定standard low的一个session的一个这样的一个进程的话,已经在我们对应的这样的一个node 01节点上面已经启动。对于task executor,也就是我们task manager的这样的一个执行器,它的一个实例的话也是在我们当前的一个节点上运行起来。我们通过java里面的GPS可以看得到,在当前的这样的一个节点上面,已经运行出来了我们对应的这样的一个stand alone的一个集群的一些进程,里面包含了一个class的一个entry point,以及我们的一个task manager的一个runner OK。当我们后台的local的这样的一个机部署完毕了之后,那我们打开浏览器输入相应的这样的一个地址,note 01的这样的一个地址。然后note 01的话,我们默认的端口是8081。

OK, 我们现在就可以看得到我们的standard low的集群,就是单机版的这样的一个部署的集群已经启动。其实可以看得到这样的一个里面有task manager这样一个task manager的一个实例节点已经启动。在这个样的一个服务里面的话,我们可以看得到对于task manager下面的相关的一些信息的话。我们都可以在这样的一个task manager的一个banner里面可以查看得到。包括它的一些log的一些信息,还有一些thread的一些dump的一些信息。OK我们在OVO的这样的一个页面里面可以看得到,就是它的一个task slot的一个有效的一个task slot的数量,以及它的一个当前的一个runtime running的一个job的一个这样的一个drop OK job的一个数量OK,我们再往下走的话,其实可以看到在我们job里面以及我们complaint的job里面的话,都有相应的这样的一个监控的一个页面。

OK那我们在job manager这样的一个banner里面能拿到的就是我们所有和集群相关的一些配置的一些信息的话。我们可以在job manager上那个banner里面去查看得到。包括job manager自己启动过程中的一些log的一些日志的一些输出,以及我们的一些log的一些list。我们其实这个只是在本地,我们也可以在我们的环境里面可以看得到OK。我们刚才看得到的这样的一个日志的话,我们都可以到我们的这样的一个路径里面。

然后可以看得到我们刚才启动的这样的一个日志。那我们是在package里面已经解压的这样的一个新的一个安装包OK,我们可以看得到在这个日志路径里面的话,我们其实也是可以看得到对应的这样的一个集群启动过程中,包括我们的一个session的一个job manager的日志,以及我们的一个task manager上面的一个日志。我们都可以通过类似这种方式去获取到我对应的这样的一个日志的一个输出。页面的话也是一种获取的方式。通过我们后台的这样一种日志的查看那种方式的话也是一种获取的一个方式,都可以去看得到。

OK, 这个其实就是整个standard low的一个集群的一个部署。我们可以看到在单个的这样的一个主机,也就是在note 01的这样的一个节点上面的话,我们基本上就完成了对我们的一个单机版的一个集群的一个部署。相对来说显得就比较简单。那我们对应的如果去停止这样的一个集群的话,那我们就可以去直接去调用stop cluster的这样的一个脚本的话。可以直接去把我们对应的这样的一个集两个服务去把它停止OK,这个其实就是在local模式下面去部署我们的standard allow的一个集群的话,是需要涉及到的几个点OK。

那我们继续看一下flink在stand low的这样的一个集群模式的多期部署是怎么样去操作的那我们看一下整个在屏幕里面可以看得到,一共有5台这样的一个服务器。有note 0102030405。我们前面说过在node 01上面去部署drop manager master节点。在其他的几台机器上面去部署我们的task manager的这样的一个实例的一个节点。

首先我们来看一下,对于我们在node 01的这样的一个节点,我们已经将相应的这样的一个flink的一个安装包下载下来了。我看我们下一步一步的话是将我们的这样的一个安装包进行一个解压。OK, 我们这个安装包解压完成了之后,我们下一步的话,其实是进入我们的一个flink的一个这样的一个安装的一个路径。我们进去了之后,对我们的一个配置文件进行相应的这样的一个修改。

前面我们已经提到了,对于我们在如果在多机部署的情况下,我们需要对我们的flink的一个康复的一个路径里面,需要去指定我当前的master这样的一台节点的它的一个host name或者它的一个IP地址。我们在这里的话是我们的node 01的这台节点。OK. 

我们接下来配置一下我们的master。Master里面的话,因为我们是指定的是只有一台node 01的这样的一台节点,没有配这样的一个高可用的一个服务。所以说这是这个地方只需要去配置一下master节点的host的name,或者它的一个IP地址即可。

下面的话是配置一下我们的的一个节点。Worker节点的话,它其实涵盖了几台机器。我们分别配一下node 02、note 03,然后note 0、node 04还有node 05这4台机器作为我们的一个worker节点,我们分别进行一个保存。OK我们整个的一个配置的一个修改的一个过程基本上就完毕了。

我们下面一步的话是把我们的一个flink的一个安装的一个包。我们这个二进制的一个安装包的话,我们需要去copy到我们其他的几个节点。我们这个节点之间已经配置了相应的这样的一个SSH的这样的一个互信。我们可以直接去把我们的一个安装包去copy到对应的这样的一个节点上面去。我们这个地方的话是去同步到02的这样的一个节点。OK. 

同样的我们把这样的一个安装包的话,也同步到03的这样的一个节点。同样的我们也是copy到04的这个节点,最后的一个05的这样的一个节点。OK, 我们这样的一个安装包的话,我们基本上就完成了一个copy的一个过程。我们看到每台机器上面的这个flink training的这样的一个路径里面,所有的安装包基本上都已经拿到手。这样我们下一步的话是在每台机器里面去执行它的一个解压的一个脚本OK我们把每台机器的一个安装包全部都进行一个解压的一个操作。下面一步的话我们可以看得到,在flink的这样的一个路径里面,它其实已经拿得到我们的一个具体的一个解压出来的这样的一个安装包。

那我下面一步的话,其实是需要对我们的一个flink的这样的一个安装包里面的路径的一个所有的这样的一个配置。也不是所有的配置,就是可以通过将所有的配置,因为它每个配置基本上都一样。所以我们直接就把所有的配置去copy到每台的这样的一个主机上面去。然后把之前改过的这样的一个配置的话,同步到其他的这样的一个机器里面去OK。

这个copy的动作的话是相对比较快一点的,我们继续。

OK我们每台机器上面的这样的一个路径里面的话,基本上就将所有的这样的一个最新的配置,好的这样的一个配置文件全部都已经拿得到。我们拿一个配置文件看一下,对应的master的服务的话,我们也可以看得到OK。下面的话,基本上整个flink的这样的一个多机部署的这样的一个standard load集群的配置基本上修改完毕。

对于我们下面一步的话,我们就可以对我们当前的这样的一个集群进行一个启动的一个过程,启动的一个步骤。我们可以对我们的集群进行一个启动。OK, 我们从这样的一个输出的一个日志上面就可以看得到。对于我这样的一个每台机器上面,像02、03、04、05的这样的一台机器上面,就已经得到了我对应的输出的一个它manager启动的这样的一个消息。那我们看一下node 01上面当前仅启动了我们的一个job manager的一个session的一个class。按照pin的这样的一个进程。对于其他的这样的一个服务器来讲的话,我们可以通过GPS看到这个。因为本身这台机器上面有hadoop相关的一些配置,我们不用管它。

那对于我们来讲的话,我们可以看得到的话,这里面有一个task manager runner。每台机器上面都启动了对应的这样的一个task manager runner的这样的一个服务OK。下面的话,其实我们还是刚才的这样的一个地址的话。我们可以看到进入了之后也是note 018081的这样的一个端口。然后我们可以看到的话,我们在集群内部的话,整个已经启动了四台这样的一个task manager的一个实例。每一个task manager提供的资源卡槽的数量都是一,它当前也是free的都是一。它的一个CPU的核数是八个核,以及它的一个物理内存都是30G的这样的一个物理内存,对于我这样的一个standard low的一个多G部署来讲的话,其实目前就已经完成了一个基本的一个部署和一个启动的一个操作。

下面一步的话,其实就是对于我们如何去把我们的一个作业去提交到我们已经启动的这样的一个standard load,这样的一个集群上面去。接下来的话,我们看一下怎么样去把我们的一个作业提交到我们已经部署好的这样的一个standalone的一个集群上面去。在这里的话,其实我们有对应的这样的一个命令。比如说我们最简单的这种方式就是flink run,然后指定我对应的what count这样的一个应用的一个架构。我们也具体的参数暂时先不用指定。我们把这样的一个作业的话去直接去提交到我对应的这样的一个standard load集群上面,我们直接进行一个回撤即可。这时候的话其实可以看得到对应的这样的一个work count的一个词频统计的一个作业。

基本上完成了之后,我们到对应的这样的一个前端的8081的这样的一个页面上面去看一下它的一个作业运行的一个情况。在这里面的话,其实可以看得到的话,这个flink刚才其实我们已经提交到对应的账一个word count的一个作业。它其实已经运行在我们的一个集群。因为这个程序它其实是一个batch的那batch的话它其实也不是7乘24小时这样的一个长时间运行的一个作业。他就已经在complete job里面去到这样的一个banner页面里面了。

我们进去了之后可以看得到我对应的这样的一个dag图。这个里面的话就是我们的data source进行flat map,然后再进行grow by key,然后进行一个操作,再进行一个reduce,然后再进行一个data sync的一个输出。整个下来的话,其实就是我们这样的一个work count的一个作业的一个执行的一个过程OK。整个的话,其实从standard load的这样的一个集群的一个部署,以及到它的一个启动,以及到他的一个作业的一个提交的一个过程。基本上就是我们整个的一个standalone的这样的一个部署模式里面涵盖的一些内容。通过本节课的学习,我们基本上了解了flink on standalone的这样一种集群部署模式,它的一个核心原理以及它的一个实践的一个操作。在下节课程,我们重点会讲解flink on娅的一个集群部署模式的一个是它相应的原理,以及它的一个部署的一个实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JSP技术的固定资产管理系统

开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSPServlet 工具:MyEclipse、Tomcat 系统展示 首页 注册界面…

RocketMQ的安装和原理

.RocketMQ的安装 一.RocketMQ安装 1.1.下载RocketMQ 下载地址:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/ 下载后解压 Bin : 可执行文件目录 config:配置文件目录 Lib : 依赖库,一堆Jar包 1.2.配置ROCKETMQ_HOME…

uniapp中Error: project.configjson: libVersion 字段需为 string. string

错误如下 找到manifestjson文件到源码视图 添加这段代码"libVersion": "latest",即可

众爱宠物开源项目介绍

众爱宠物管理系统是一个集会员管理、宠物管理、商品管理、库存管理、数据管理、收银管理、多门店管理等功能于一体的综合管理系统,具有操作方便、简单、安全等优点。 开源项目地址

Nacos2.2.3默认无需登录,配置中开启验证不生效

Nacos由于反序列化漏洞,需要升级到2.2.3。 升级后发现不需要登录就可以进行操作,出于安全考虑,需要开启验证。 按照网上的方法进行配置后,重启Nacos仍然不需要登录。 最后发现是我们使用的集成框架默认在代码中关闭了开关&#xf…

基于STM32和人工智能的智能仓储管理系统

目录 引言环境准备智能仓储管理系统基础代码实现:实现智能仓储管理系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:智能仓储管理与优化问题解决方案与优化收尾与总结 1. 引言 智能仓储管理系统通过结合STM32嵌…

Hadoop 2.0 大家族(二)

目录 三、Hbase(一)Hbase简介(二)Hbase入门 四、Pig(一)Pig简介(二)Pig入门 三、Hbase Hbase是基于Hadoop的开源分布式数据库,它以Google的BigTable为原型,设…

小程序项目业务逻辑回忆3

1.用户激活票劵 在我的票劵未激活票劵查询业务中,票劵是可以通过激活按钮进行激活的 该业务涉及3个表users用户信息表\order_items门票订单关联表\signin_records签到信息表 用户激活票劵时,首先使用该用户user_id创建signin_record表,signin_record表中门票类型ticket_type…

天地图(二)引入地图

1、在public下的index.html中引入天地图 <script src"http://api.tianditu.gov.cn/api?v4.0&tk你的密钥"></script> 2、在vue文件中写入 <template><div:id"mapDiv currentIndex"class"map"style"position: a…

生成式AI和LLM的一些基本概念和名词解释

1. Machine Learning 机器学习是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;旨在通过算法和统计模型&#xff0c;使计算机系统能够从数据中学习并自动改进。机器学习算法使用数据来构建模型&#xff0c;该模型可用于预测或决策。机器学习应用于各种领域&#x…

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色&#xff0c;它们定义了语言的基本构造和语法规则&#xff0c;通过使用关键字&#xff0c;开发者可以创建变量、定义数据类型、控制程序流程&#xff08;如循环和条件判断&#xff09;、声明函数等。由于这些字是保留的&#xff0c;所以编…

[SAP ABAP] 变量与常量

1.变量 定义变量的基本方式 DATA <name> TYPE <type> [VALUE <val>]. <name>&#xff1a;指定变量的名称 <type>&#xff1a;指定变量的数据类型 <val>&#xff1a;指定<name>的初始值 示例1 定义变量lv_data1和lv_data3 输出结果…

并发调用deepseek API,构建多轮对话数据

现在大模型领域非常魔幻一件事&#xff0c;是调用友商开源的大模型构建自己的数据集&#xff0c;大家相互调用&#xff0c; 数据同源导致同样的问题回答内容也差不多&#xff0c;也难怪大家会质疑某些大模型是套壳gpt了&#xff0c;看来只有能积累原始数据的公司才能最终活下来…

threejs 光影投射-与场景进行交互(六)

效果 场景中有三个立方体,三种颜色.点击变成红色,再点恢复自身原有颜色 代码 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { log } from three/examples/jsm/nodes/Nodes.js//…

运算放大器(运放)积分器电路

积分器电路 运算放大器(运放)积分器电路是在图2运放反相放大器的电路上增加一个积分电容构成&#xff0c;该积分电容并联在运算放大器的反馈电阻上&#xff0c;见图1。 运算放大器(运放)反相放大器电路 设计目标 输入fMin输入f0dB输入fMax输出VoMin输出VoMax电源Vcc电源Vee1…

互联网的起源与发展历程:从ARPANET到现代网络社会

ARPANET&#xff08;1969年&#xff09;&#xff1a; 1969年&#xff0c;ARPANET上线&#xff0c;最初连接了加州大学洛杉矶分校、斯坦福研究所、加州大学圣巴巴拉分校和犹他大学。ARPANET的设计目的是创建一个分布式的网络系统&#xff0c;以确保在部分网络受到攻击时&#xf…

【源码+硬件说明+接线】Arduino-ESP32 http访问播放网络mp3音乐并获取获取远程服务器文件并存SD卡

前言 最近跟浩楠哥接了一个外包,不得不说人总得逼自己一把就可以学到很多东西,这次收获不小,就把一部分困扰我一段时间的部分放出来给大家看看,避免大家踩我相同的坑 1. 硬件准备 1.1 Esp32Wroom 主控使用esp32Wroom,我具备蓝牙,wifi,低功耗蓝牙功能,配合Arduino库作…

Go-知识并发控制mutex

Go-知识并发控制mutex 1. 介绍2. 数据结构2.1 Mutex 结构体2.2 Mutex 方法 3. 加锁解锁过程3.1 简单加锁3.2 加锁被阻塞3.3 简单解锁3.4 解锁并唤醒协程 4. 自旋过程4.1 什么是自旋4.2 自旋条件4.3 自旋的优势4.4 自旋的问题 5. Mutex 模式5.1 Normal 模式5.2 Starving 模式(饥…

Python基础-连接Mysql数据库

一、pymysql pymsql 是 Python 中操作 MySQL 的原生模块&#xff0c;其使用方法和 MySQL 的SQL语句几乎相同 1、下载安装 pip3 install pymysql2、执行SQL 执行 SQL 语句的基本语法&#xff1a; 需要注意的是&#xff1a;创建链接后&#xff0c;都由游标来进行与数据库的操…

[Linux内核驱动]内存动态申请

内核空间内存动态申请 更多详细内容可以查看我的github kmalloc() 函数原型&#xff1a; void *kmalloc(size_t size, gfp_t flags);参数说明&#xff1a; size&#xff1a;要分配的内存块的大小&#xff0c;以字节为单位。flags&#xff1a;分配标志&#xff0c;用于指定内…