filemap

.net环境下跨进程、高频率读写数据

老子叫甜甜 提交于 2021-01-24 19:15:54
一、需求背景 1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。 单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑, 难点在于这个规模的热点数据,变化非常频繁。 数据来源于一些检测设备的采集数据,一些大表,有可能在极短时间内(如几秒钟)可能大部分都会变化, 而且主程序也有一些后台服务需要不断轮询、读写某种类型的设备,所以要求信息交互时间尽可能短。 2、之前的解决方案是把所有热点数据,统一加载到共享内存里边,到也能够支撑的住( 毫秒级的 ),但是由于系统架构升级,之前的程序(20年前的)不能兼容。 只能重新写一个,最先想到的是用redis,当时把所有API重写完成后,测试发现效率不行, 是的,你没有看错,redis也是有使用范围的。 3、 redis读写非常快,但是对于大批量读写操作我觉得支持不够, 虽然redis支持批量读写,但是效率还是不够快, 对于字符串(string)类型的批量读写,我测试过; 效率比较好的在每批次200 至 250条之间,处理20万条数据耗时5秒左右, (PC机,8G,4核) 而对于有序集合(sorted set)类型,批量写的操作用起来非常别扭, 而且没有修改API(如有其他方式请指教) ,我测试过,效率没string类型那么高 其他类型不适合我的业务场景,就没考虑使用了 4、所以项目组最后决定还是用回共享内存

鸿蒙内核源码分析(源码结构篇) | 关于内核这些问题你知道多少?

佐手、 提交于 2021-01-19 15:59:20
鸿蒙内核源码注释中文版 【 Gitee仓 | CSDN仓 | Github仓 | Coding仓 】 项目中文注解鸿蒙官方内核源码,图文并茂,详细阐述鸿蒙架构和代码设计细节.每个码农,学职生涯,都应精读一遍内核源码.精读内核源码最大的好处是:将孤立知识点织成一张高浓度,高密度底层网,对计算机底层体系化理解形成永久记忆,从此高屋建瓴分析/解决问题. 鸿蒙源码分析系列篇 【 CSDN | OSCHINA | WIKI 】 从 HarmonyOS 架构层视角整理成文, 并首创用生活场景讲故事的方式试图去解构内核,一窥究竟。 kernel_liteos_a_note: 鸿蒙内核源码注释中文版 -> 点击目录和文件查看源码的详细中文注解 可以肯定是以下问题在一行行的源码中都能找到答案 kernel_liteos_a_notekernelbasecorelos_bitmap.c -> -> 位图管理器有什么作用 ? 在内核常应用于哪些场景 ? los_process.c -> 鸿蒙内核源码分析(进程管理篇) -> 进程是内核的资源管理单元,它是如何管理 任务, 内存,文件的 ? 进程间是如何协作的 ? los_sortlink.c -> -> 排序链表的实现,它的应用场景是怎样的 ? los_swtmr.c -> -> 内核的定时器是如何实现和管理的 ? los_sys.c -> ->

.Net Core使用Unity替换原生DI

一曲冷凌霜 提交于 2020-08-17 03:48:24
一、DIP、IOC、DI   面对对象设计原则可以帮助我们开发出更好的程序,其中有一个依赖倒置原则DIP并由此引申出IOC、DI等概念。就先粗略的了解一下: DIP(依赖倒置原则):程序要依赖于抽象接口,不要依赖于具体实现。 IOC(控制反转):面对对象编程中的一种设计思想。 DI(依赖注入):组件之间依赖关系由容器在运行期决定。   总的来说控制反转(IoC)是依赖倒置原则(DIP)的实现思路;依赖注入(DI)又是IoC的一种实现方式。 二、Unity   Unity容器(Unity)是一个轻量级,可扩展的依赖注入容器。它有助于构建松散耦合的应用程序,并为开发人员提供以下优势: 简化对象创建,尤其是对于分层对象结构和依赖项 抽象要求; 这允许开发人员在运行时或配置中指定依赖关系,并简化横切关注点的管理 通过将组件配置推迟到容器来提高灵活性 服务定位能力; 这允许客户端存储或缓存容器 实例和类型拦截 按惯例注册 三、Unity替换.Net Core原生DI   关于Unity替换.Net Core原声DI我发现在网上的中文资料基本没有,所以我在Unity的Gitbub上找到了相关的内容,希望可以给大家带来帮助。   我的是.Net Core2.2首先需要通过Nuget引入Unity(5.10.2)和Unity.Microsoft.DependencyInjection(5.10.1

C#基于接口设计三层架构Unity篇

吃可爱长大的小学妹 提交于 2020-04-27 22:35:57
一、引言 面向接口(抽象)编程,是为了降低程序的耦合度,符合依赖倒置原则。因此典型的三层架构UI、BLL、DAL基于接口设计后,会拓展成UI、IBLL、BLL、IDAL、DAL。在上一篇《 C# IoC学习笔记 》中我们可以了解到,控制反转(IoC)使对象的创建交给了第三方IoC容器如Unity。利用Unity的IoC功能,可以对基于接口设计的三层架构做进一步的升级,搭建一个更容易实现的可配置可扩展的三层架构;利用Unity的AOP功能,使框架更加的简洁,因为它抽出了框架的公共逻辑部分。 二、项目建立 2.1、项目建立 依次新建项目UI(Client)、IBLL、BLL、IDAL、DAL、Model、Common。 2.2项目说明 三、项目之间的引用关系 3.1、对着项目名称右键->添加->引用->项目,添加各个项目的引用。 3.2、引用说明 四、项目需安装的NuGet包 五、注意事项 对Unity容器的IoC调用进行封装,Container应封装成 单例模式 以提高效率,此处使用MemoryCache。 5.1、在Common项目引用System.Runtime.Caching.dll,并在Helper文件夹下新建一个缓存帮助类:MemoryCacheHelper.cs。 /// <summary> /// 内存缓存帮助类,支持绝对过期时间、滑动过期时间、文件依赖三种缓存方式。

IOC控制反转、Unity简介

▼魔方 西西 提交于 2020-04-27 05:32:49
参考博客地址: Unity 系列文章,推荐: http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html https://www.cnblogs.com/lyps/p/10560256.html 这篇文章主要介绍.NET Framework下面的IOC以及Unity的使用,下一篇文章介绍.NET Core下面自带的容器IServiceCollection以及Autofac的使用 https://www.cnblogs.com/taotaozhuanyong/p/11562184.html IOC(Inverse of Control),控制反转。 说到IOC,就不得不提DI(Dependency Injection),依赖注入 IOC是目标效果,需要DI依赖注入的手段。 分层架构时这些是必须的,可以划分边界独立演化,也方便分工,促进代码复用。。 依赖倒置原则DIP:   系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖。依赖抽象而不是依赖细节。在A勒种调用了B类,A类就是高层,B类就是低层。 面向抽象:   1、一个方法满足多种类型   2、支持下层的扩展。 下面有三种创建一个对象的方式: AndroidPhone phone = new AndroidPhone(); // 1 全是细节 IPhone

.Net Core使用Unity替换原生DI

旧街凉风 提交于 2020-04-27 04:03:15
一、DIP、IOC、DI   面对对象设计原则可以帮助我们开发出更好的程序,其中有一个依赖倒置原则DIP并由此引申出IOC、DI等概念。就先粗略的了解一下: DIP(依赖倒置原则):程序要依赖于抽象接口,不要依赖于具体实现。 IOC(控制反转):面对对象编程中的一种设计思想。 DI(依赖注入):组件之间依赖关系由容器在运行期决定。   总的来说控制反转(IoC)是依赖倒置原则(DIP)的实现思路;依赖注入(DI)又是IoC的一种实现方式。 二、Unity   Unity容器(Unity)是一个轻量级,可扩展的依赖注入容器。它有助于构建松散耦合的应用程序,并为开发人员提供以下优势: 简化对象创建,尤其是对于分层对象结构和依赖项 抽象要求; 这允许开发人员在运行时或配置中指定依赖关系,并简化横切关注点的管理 通过将组件配置推迟到容器来提高灵活性 服务定位能力; 这允许客户端存储或缓存容器 实例和类型拦截 按惯例注册 三、Unity替换.Net Core原生DI   关于Unity替换.Net Core原声DI我发现在网上的中文资料基本没有,所以我在Unity的Gitbub上找到了相关的内容,希望可以给大家带来帮助。   我的是.Net Core2.2首先需要通过Nuget引入Unity(5.10.2)和Unity.Microsoft.DependencyInjection(5.10.1

How to send vector<vector<type>> via MapViewOfFile

白昼怎懂夜的黑 提交于 2019-12-25 08:58:00
问题 I have the following code in a parent process: vector<vector<double> > matrix(n); /* matrix NxM */ /* pushing data */ HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 2*sizeof(int) + sizeof(double)*n*m, lpName); LPVOID lp = MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0); mat_tmp* tmp = (mat_tmp*)lp; tmp->n = n; tmp->m = m; tmp->vv = vector<vector<double> >(matrix.begin(), matrix.end()); In a child process I'm trying to receive this vector >, but my child

What's the max file mapping size in 64bits machine

一个人想着一个人 提交于 2019-12-01 21:39:19
问题 I'm new to 64-bits architecture. Could you tell me what's MAX file size supported by file mapping in 64 bits linux machine. I want to open more than 20GB files by file mapping, is it available? I write a sample code. But it causes Bus Error when I get the value of the pointer in GBSIZE offset: unsigned char* pCur = pBegin + GBSIZE; //pBegin is the pointer returned by mmap printf("%c",*pCur); BTW, printf("%c",*pBegin ); works fine. and my address sizes : 38 bits physical, 48 bits virtual Here