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

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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

MySQL MHA集群详解(数据库高可用)

《MySQLMHA集群详解(数据库高可用)》MHA(MasterHighAvailability)是开源MySQL高可用管理工具,用于自动故障检测与转移,支持异步或半同步复制的MySQL主从架构,本... 目录mysql 高可用方案:MHA 详解与实战1. MHA 简介2. MHA 的组件组成(1)MHA

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不

MySQL数据库读写分离与负载均衡的实现逻辑

《MySQL数据库读写分离与负载均衡的实现逻辑》读写分离与负载均衡是数据库优化的关键策略,读写分离的核心是将数据库的读操作与写操作分离,本文给大家介绍MySQL数据库读写分离与负载均衡的实现方式,感兴... 目录读写分离与负载均衡的核心概念与目的读写分离的必要性与实现逻辑读写分离的实现方式及优缺点读负载均衡

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的