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

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

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识