protobuf

MMKV的原理与实现(一)

你说的曾经没有我的故事 提交于 2019-12-25 19:45:01
MMKV的原理与实现(一) 说到轻量级的数据持久化,大家最先想到的就是SharedPreferences(以下简称SP)了,SP存储方式为xml,直接使用I/O流进行文件的读写,这就形成了一个弊端:每次写入或修改都需要替换掉原来的数据,并将所有数据 重新写入文件。可想而知,如果一个sp文件的内容过多,那么再写入的时候会造成卡顿,甚至会有 ANR的风险。 一、I/O 1、先看一下SP的工作原理 虚拟内存被操作系统划分成两块:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。 2、使用I/O写入文件的流程 1、调用write,告诉内核需要写入数据的开始地址与长度 2、内核将数据拷贝到内核缓存 3、由操作系统调用,将数据拷贝到磁盘,完成写入 可见,将数据写入文件需要将数据拷贝两次,再写入到文件中,如果数据量过大,也会有很大的性能损耗。 二、MMKV 1、什么是MMKV 为了解决上述问题,微信团队基于MMAP研发了MMKV来代替SP。 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS /

使用mpvue开发小程序

ε祈祈猫儿з 提交于 2019-12-21 01:05:52
前言: 最近接到小程序的开发需求,由于之前也没开发过小程序,心情还是有点激动。先花15分钟看一遍小程序官方文档,再花10分钟看一遍mpvue官方文档,然后拿着原型图和UI图就开干。踩了不少坑,写篇博客记录一下。PS:小程序官方文档地址: https://developers.weixin.qq.com/miniprogram/dev/ ,mpvue官方文档: http://mpvue.com/ mpvue: mpvue 是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心, mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。 不得不说对于会vue的人来说,使用mpvue开发小程序基本就是0成本,看一遍文档就能直接上手开发小程序。当然mpvue框架也有很多需要吐槽的地方:比如不支持slot,导致封装公共组件非常的不方便;不支持vue-router,不过通过引入mpvue-router-patch可以在 mpvue 中使用 vue-router 兼容的路由写法。mpvue-router-patch的GitHub地址为: https://github.com/F-loat/mpvue-router-patch 。更多mpvue项目可以在 https:/

golang 使用 protobuf 的教程

孤人 提交于 2019-12-17 20:05:29
1、下载protobuf的编译器protoc 地址: https://github.com/google/protobuf/releases window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exe linux: 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip 解压,把bin目录下的protoc复制到GOPATH/bin下,GOPATH/bin加入环境变量。 如果喜欢编译安装的,也可下载源码自行安装,最后将可执行文件加入环境变量。 2、获取protobuf的编译器插件protoc-gen-go 进入GOPATH目录 运行 > go get -u github.com/golang/protobuf/protoc-gen-go 如果成功,会在GOPATH/bin下生成protoc-gen-go.exe文件 3、创建一个test.proto文件 //指定版本 //注意proto3与proto2的写法有些不同 syntax = "proto3"; //包名,通过protoc生成时go文件时 package test;

使用protobuf的socket例子

一曲冷凌霜 提交于 2019-12-17 09:34:52
peop.proto package pck ; message People { required string name = 1 ; required int32 id = 2 ; required string email = 3 ; } server.cpp gdut17@ubuntu : ~ / protobuf_1215 / example2 / people$ cat server . cpp # include <stdio.h> # include <stdlib.h> # include <sys/socket.h> # include <arpa/inet.h> # include <unistd.h> # include <string.h> # include <string> # include <iostream> # include "peop.pb.h" using namespace std ; # define SIZE 300 int main ( int argc , char * argv [ ] ) { int server_sock , client_sock , r ; struct sockaddr_in server_addr , client_addr ; socklen_t len ; char buf [ SIZE ] ;

python下使用protobuf

こ雲淡風輕ζ 提交于 2019-12-16 13:04:52
python解决ImportError: No module named google.protobuf   关于protocol buffer的优点,就过多涉及;如果涉及到数据传输和解析,使用pb会比自己去写解析代码更有效率,至少对于大部分而言是这样的。 一、下载,安装   到code.google.com下载源码,解压:     ./configure && make && make check && make install     最后一步涉及到权限,可能会需要sudo。 二、定义一个proto文件   下面依然是给出一个简单的例子,要使用proto首先需要自己定义一个proto文件,定义一个people.proto文件,内容如下:   message people   {    optional string name = 1;    optional int32 height = 2;   } 三、生成一个python可用的py文件   然后就是生成对应的py文件,命令如下:     protoc -I=./ --python_out=./ people.proto 其中-I是source的路径,--python_out表示对应python库的生成路径,然后是对应的proto文件。当然,pb还支持c++和java,修改--python_out即可。

详解服务器性能测试的全生命周期?——从测试、结果分析到优化策略(转载)

喜夏-厌秋 提交于 2019-12-16 10:02:51
服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题,实现对服务器进行更有针对性的优化,提升服务器的性能。 1. 服务器性能测试小结 讲到服务器性能大部分人会想到这个服务器的架构是什么样子的,用的什么epoll,select,spring,tornado之类的。其实从本质上来看的话目前大部分的服务器主要包括逻辑层以及DB层,我们采用的各种框架组件处于逻辑服务器中,如下图所示。 服务器性能测试是一项比较繁琐的事情,作为没有做过性能测试的同学可能需要理清楚以下几个事情。 1.1. 协议分析 首先是协议分析,性能测试本质上是我们用代码来模拟真实的用户请求,所以我们必须要知道发送出去的请求内容才能模拟。在典型的CS服务器中很多使用了protobuf,thrift,tdr(腾讯自研)来序列化以及反序列号请求内容。 序列化之后一方面可以对数据进行压缩处理,另一方面也避免请求内容明文传输造成被抓包·泄漏数据的危险。之前有过服务器传输数据的时候使用的是明文直接发送,而且这个数据是一些敏感的sql语句,这样首先暴露了数据库的表结构,同时不法分子可以通过模拟发包造成“脱裤”甚至是数据被清空。 1.1.1. Protobuf 谷歌出品,必属精品。Protobuf使用起来很方便,学习成本非常低

Google Protobuf在Netty中的使用

元气小坏坏 提交于 2019-12-16 00:23:54
[toc] Google Protobuf在Netty中的使用 程序代码来自于《Netty权威指南》第8章,已经加了注释,不过需要注意的是,使用的proto源代码是在 Google Protobuf入门与使用 中生成的,关于protobuf代码自动生成工具的使用可以参考这篇文章。 例子中,通过××× ProtobufVarint32FrameDecoder 和编码器 ProtobufVarint32LengthFieldPrepender 的使用已经解决了半包问题,测试时可以把其注释掉,这样就可以演示Netty中使用Protobuf出现的TCP粘包问题。 同时,通过protobuf的使用,也可以深刻感受到,其在Netty中的使用确实非常简单,编解码、半包问题,只需要添加相关的处理器即可,而且它可以方便地实现跨语言的远程服务调用。(protobuf本身提供了对不同语言的支持) 但其实在使用时会发现有一个问题,就是编解码的对象是需要使用其生成的特定的proto对象来进行操作的,也就是说,需要编写.proto文件,再通过protoc来生成相应语言的代码文件,显然这样做还是会有些麻烦(虽然其实也还好,不算麻烦),有没有方便点的方法呢?后面通过protostuff的使用即可解决这个问题。 服务端 SubReqServer.java package cn.xpleaf.subscribe;

win10环境TensorFlow Object_detection 安装部署

与世无争的帅哥 提交于 2019-12-15 17:24:10
TensorFlow Object_detection 安装部署 win10环境TensorFlow Object_detection 安装部署 Protobuf安装 Object_detection安装 win10环境TensorFlow Object_detection 安装部署 下载models tensorflow object_detection model 下载Protobuf Protobuf Protobuf安装 下载Protobuf之后,解压,进入bin文件夹: 点击protoc安装,安装完成后,在cmd窗口中输入protoc,如果出现类似一堆参数信息,则说明配置生效。 Object_detection安装 解压models到目录后编辑环境变量,配置环境变量 cd 到research文件夹地下,编译生成py文件 protoc object_detection/protos/*.proto --python_out=. 找到python安装目录下的site-packages文件夹,在里面创建.pth文件,文件名随便取,内容为models文件下research目录、以及 reserach下slim的路径: C:\models\research C:\models\research\slim 然后cd 到reserch目录下object_detection

gRPC快速入门(一)——Protobuf简介

走远了吗. 提交于 2019-12-15 09:37:31
gRPC快速入门(一)——Protobuf简介 一、Protobuf简介 1、Protobuf简介 Protobuf即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化数据结构的方式,是一个灵活的、高效的用于序列化数据的协议。 与XML和JSON格式相比,protobuf更小、更快、更便捷。protobuf是跨语言的,并且自带一个编译器(protoc),只需要用protoc进行编译,就可以编译成Java、Python、C++、C#、Go等多种语言代码,然后可以直接使用,不需要再写其它代码,自带有解析的代码。 只需要将要被序列化的结构化数据定义一次(在.proto文件定义),便可以使用特别生成的源代码(使用protobuf提供的生成工具)轻松的使用不同的数据流完成对结构数据的读写操作。甚至可以更新.proto文件中对数据结构的定义而不会破坏依赖旧格式编译出来的程序。 GitHub地址: https://github.com/protocolbuffers/protobuf 不同语言源码版本下载地址: https://github.com/protocolbuffers/protobuf/releases/latest 2、Protobuf的优缺点 Protobuf的优点如下: A、性能号,效率高 序列化后字节占用空间比XML少3-10倍

sona: Spark on Angel部署教程

回眸只為那壹抹淺笑 提交于 2019-12-11 16:19:54
Spark on Angel同时支持yarn和local两种运行模型,从而方便用户在本地调试程序。 spark on Angel本质上是一个spark的application,但是多了一个附属的application。在任务提交成功后,集群上会出现两个独立的application,一个是spark application,一个是angel-PS application,两个application不关联,一个spark on Angel的作业删除,需要用户或者外部系统同时kill两个。 Sona部署流程 安装spark 参考spark安装 安装sona 编译sona 编译环境依赖 * Jdk >= 1.8 * Maven >= 3.0.5 * Protobuf >= 2.5.0 需要和hadoop环境自带的protobuf版本保持一致。目前hadoop官方发布包使用的是2.5.0版本,所以推荐使用2.5.0版本,除非你自己使用更新的protobuf版本编译了hadoop。 git clone https://github.com/Angel-ML/sona.git 编译:进入源码根目录 mvn clean package -Dmaven.test.skip=true 编译完成后,在源码根目录dist/target目录下会生成一个发布包:sona-0.1.0-bin.zip