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

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

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES