| 副标题[/!--empirenews.page--] JSON文档在Internet上无处不在,服务器花费大量时间来解析这些文档。我们希望在进行完全验证(包括字符编码)时尽可能使用常用的SIMD指令来加速JSON本身的解析。表现结果 simdjson使用的指令比最先进的解析器RapidJSON少四分之三,比sajson少百分之五十。据我们所知,simdjson是第一个在商用处理器上以每秒千兆字节运行的完全验证的JSON解析器。 
 在Skylake处理器上,twitter.json文件上各种处理器的解析速度(以GB / s为单位)如下。要求 我们通过Visual Studio 2017或更高版本支持Linux或macOS等平台以及Windows; 带有AVX2的处理器(即,2013年发布的Haswell微体系结构的Intel处理器和2017年发布的Zen微体系结构的AMD处理器); 最近的C ++编译器(例如,GNU GCC或LLVM CLANG或Visual Studio 2017),我们假设C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本。License 此代码在Apache License 2.0下提供。 在Windows下,我们使用 代码示例windows/dirent_portable.h文件(在我们的库代码之外)构建一些工具 #include "simdjson/jsonparser.h"  /...  const char * filename = ... //  //使用您想要的任何方式获取JSON文档的字符串 std::string_view p = get_corpus(filename); ParsedJson pj; pj.allocateCapacity(p.size());//分配内存以解析p.size()字节 const int res = json_parse(p, pj); //进行解析,成功时返回0  //解析完成! if(res!= 0){      //您可以使用“simdjson / simdjson.h”标头来访问错误消息     std::cout << "Error parsing:" << simdjson::errorMsg(res) << std::endl; } //你可以安全地删除字符串内容 free((void*)p.data()); //可以在这里使用ParsedJson文档 // js可以与其他json_parse调用一起使用。 
 如果您不介意为每个新的JSON文档分配内存开销,也可以使用更简单的API: 用法:简单的版本#include "simdjson/jsonparser.h"  / ...  const char * filename = ... // std::string_view p = get_corpus(filename); ParsedJson pj = build_parsed_json(p);  //进行解析 //此时你不再需要p,可以执行aligned_free((void *)p.data()) if( ! pj.isValid() ) {      //出错了  } 
 有关用法,请参阅“singleheader”存储库的文件“amalgamation_demo.cpp”。这不需要特定的构建系统:只需在包含路径中复制项目中的文件即可。然后,您可以非常简单地包含它们: #include <iostream> #include "simdjson.h" #include "simdjson.cpp" int main(int argc, char *argv[]) {   const char * filename = argv[1];   std::string_view p = get_corpus(filename);   ParsedJson pj = build_parsed_json(p); // do the parsing   if( ! pj.isValid() ) {     std::cout << "not valid" << std::endl;   } else {     std::cout << "valid" << std::endl;   }   return EXIT_SUCCESS; } 
 我们需要AVX2指令的硬件支持。您必须确保指示编译器根据需要使用这些说明。在GNU GCC或LLVM clang等编译器下, -march=native最近的Intel处理器(Haswell或更好)上使用的标志就足够了。为了便于二进制文件的可移植性,您还可以直接指定Haswell处理器(-march=haswell)。您也可以使用标志-mavx2 -mbmi2。在Visual Studio下,您需要定位x64并添加标志/arch:AVX2。 注意:在某些设置中,可能需要预编译 用法(在Linux或macOS等平台上使用旧版Makefile)simdjson.cpp而不是包含它。 要求:最近的clang或gcc,和make。我们建议至少使用GNU GCC / G ++ 7或LLVM clang 6.需要像Linux或macOS这样的系统。 测试: make make test 
 要运行基准测试: make parse ./parse jsonexamples/twitter.json 
 在Linux下,该 parse命令提供了性能计数器的详细分析。 运行比较基准测试(与其他解析器): 用法(在Linux或macOS等平台上使用CMake)make benchmark 
 要求:我们需要最新版本的cmake。在macOS上,安装cmake的最简单方法可能是使用 brew然后键入 brew install cmake 
 在Linux上 有一个 相同的Brew也可以以相同的方式工作 。 (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |