“进程球”通过数据库来通信------好美的一幅图!

2024-02-06 14:32

本文主要是介绍“进程球”通过数据库来通信------好美的一幅图!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       拿着一支笔, 随便画画, 然后在纸上画了三个球, 哦, 这不就是一个个的进程么? 本来想上传亲笔画的图, 但晚上拍照效果不太好, 所以还是用鼠标来画吧。  先睹为快偷笑

 

         

         图还是挺好看的大笑

 

         下面, 我们来闲聊一下这幅图的一些东东。

 

         什么是进程呢? 笔试面试总会被问到这个讨厌的问题, 要我说, 进程就是个球啊, 看看上面的图, 难道不是么? 对, 进程就是个球。   那一年, 我还不太懂什么是进程通信, 但我居然不知不觉地用文件实现了两个进程的通信(非常粗糙的通信模式), 并解决了当时的重要问题。

 

         说到利用文件实现进程通信, 肯定会被很多人鄙视, 但无疑, 这种思路是很好的, 只是, 要注意线程同步、进程同步等, 但在实际项目中, 几乎没有这种用法。 既然利用文件实现进程间的通信很粗糙, 那利用数据库呢(图中test.db数据库的本质就是一个文件)? 也可以考虑。 实际上, 很多数据库自身已经考虑了线程同步和进程同步问题, 所以, 不用太担心多个进程间的写冲突问题。 经常会遇到这种情况:很多进程需要读写某一字段, 而这一字段经常放在数据库中。 显然,可以考虑数据库, 实际上, 很多重要的字段就是放在数据库中的, 很多场景, 很多人就是这么搞的。

 

        好, 既然进程是个球, 也说了数据库帮助进程球进行了通信, 那我们要说一下内存数据库了, 所谓内存数据库, 我理解(非官方定义), 实际上就是内存中的一种数据结构, 与数据库test.db(外存数据库)形成映射, 你要知道的是, 内存数据库中的值与外存数据库test.db的值总是一致的(需要有机制保证才行)。 看到没, 图中那个蓝色的圈圈就是内存数据库(数据结构), 像一张网一样, 网住多少岁月, 网住多少年华。

 

        我们先说说引入内存数据库的好处:

 

       1. 写的时候, 如果待写的字段值与外存数据库test.db中的字段值相同, 则直接在内存中就判断了, 实际并未与外存数据库test.db打交道。 效率高。

       2. 读的时候, 根本不需要从外存数据库test.db中读取, 直接读取内存数据库的值即可, 因为内存数据库和外存数据库有等价映射关系啊。效率高。

       现在假设外存数据库test.db中user字段的值是taoge, 那么进程1, 2, 3中内存数据库的值都是taoge. 我们以进程1为例, 现在进程1要把变量user的值变为meinv, 那是怎样的一个过程呢? 首先, 进程1用mvi和taoge进程对比, 发现这两个串不一致(如果一致, 则没有后续的过程, 自然提高了效率), 于是将进程1的内存数据库中user的值更改为meinv, 然后把meinv写到数据库test.db中。

      别忘了, 我们说过, 内存数据库里面的值要和外存数据库test.db里面的值一致, 现在进程1满足条件了, 但是进程2和进程3不满足条件啊, 所以这个时候, 会通过8和12这两条线来更新进程2和进程3中的内存数据库(需要有机制保证才行), 将内存数据库中user的值更新为meinv。 此时, 如果进程2和进程3如果想读取user的值, 那也可以,直接从内存数据库读取, 值是meinv, 在读取过程中, 并没有和外存数据库test.db打交道, 这样效率就高了。

       

       ok, 应该大致说清楚了, 内存数据库颇有点网的感觉, 也有点缓冲的感觉。

       最后, 我要说, 我挺喜欢这个图的大笑

 

       睡觉, 明天周六, 睡到自然醒。

 

 

 

 

 

 

 

 

这篇关于“进程球”通过数据库来通信------好美的一幅图!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684603

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

MybatisPlus中removeById删除数据库未变解决方案

《MybatisPlus中removeById删除数据库未变解决方案》MyBatisPlus中,removeById需实体类标注@TableId注解以识别数据库主键,若字段名不一致,应通过value属... 目录MyBATisPlus中removeBypythonId删除数据库未变removeById(Se

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八