zoukankan      html  css  js  c++  java
  • 转: 在创业公司使用C++

    from: http://oicwx.com/detail/827436

    在创业公司使用C++

    2016-01-04开发资讯

    James Perry和朋友创办了一家公司,主要是做基于云的OLAP多维数据集。因为他最熟悉C++,所以在构建OLAP引擎时,也选择了自己最擅长的语言。最初曾用Rust构建过一个原型版本,不过后来感觉风险很高,便放弃了。

    很多同事也感觉奇怪,为什么选择C++,却不用Ruby或Python之类的动态语言来开发云服务呢,毕竟后者开发交付的效率高很多。

    James撰文(https://medium.com/swlh/starting-a-tech-startup-with-c-6b5d5856e6de)解释了他的理由。

    可以从两个维度来看。

    一.开发效率

     


    C++并非动态语言,但是现代C++(C++11/14)提供了类型推导。人们对C++有很多误解,比如认为在用C++时,必须使用原生指针(raw pointer),必须输入长长的命名空间或类型信息,还要手动管理内存。而有了auto特性,开发者不必再输入那么多长长的类名和命名空间信息,C++会用类型推导来推断变量的类型。

    手动管理内存也是最常见的误解。从C++11开始,一般建议使用std::shared_ptr或std::unique_ptr自动管理内存。这要比手动管理安全很多。

    要快速构建服务或产品,高质量的库也是不可或缺的。不过在James看来,C++标准库还严重缺乏一些基本功能,而且有些API性能很差(比如从iostreams读文件)。Facebook提供了很多高质量的库,在构建OLAP云服务时帮助很大。

    1.Folly(https://github.com/facebook/folly/)

    这是一个不错的C++库,有很多高性能的类。James在其引擎中用到了fbvector、fbstring等类,与std::vector和std::string相比,它们性能更好。另外像Future,原子化的无锁数据结构也经常用到。

    Folly的容器性能很好(可以参阅:https://github.com/facebook/folly/blob/master/folly/docs/FBVector.md)。

    另外,阅读Folly的代码对C++程序员成长也有很大帮助。

    2.Proxygen(https://github.com/facebook/proxygen)

    Proxygen是Facebook开发的一个异步HTTP服务器。James使用Proxygen作为HTTP服务器,将JSON数据插入到OLAP引擎,或从引擎获得JSON数据。只需要一天,就能创建一个调用引擎的高性能服务器。

    James将其与Python Tornado服务器做了对比,在一个EC2实例上,使用200个HTTP连接,C++/Proxygen每秒可以处理1 990 130个请求,Python/Tornado每秒可以处理41 329个请求。

    3.Wangle(https://github.com/facebook/wangle)

    James的OLAP引擎本质上是一个分布式的数据库,用于存储和查询多维数据。该引擎以Wangle作为应用服务器的基础。所有的逻辑都分解到了Wangle handler中,可以链到一起构成一条流水线。每个服务器都是对称的,是相同的二进制可执行程序,没有主从之分。每个服务器节点可以通过定制的二进制协议交换数据或消息。

    二.硬件、人力成本

     


    根据前面HTTP基准测试,一台C++服务器的处理能力大约相当于40台负载均衡的Python服务器。服务器成本大幅减少。另外,如果开始选择Python,公司发展到某个阶段,需要提高服务器性能时,可能需要用C++重写,其实会浪费人力。

    总结

     


    对于创业公司而言,C++可能并非最流行的选择,但现代C++确实是可行的选择之一,它可以提供接近C的性能和更高层的抽象。随着代码量的增长,构建时间可能是个问题,不过C++17的模块应该可以解决之。

  • 相关阅读:
    archlinux .bash_history
    Ubuntu环境下挂载新硬盘
    软碟通 UltraISO U启替代品 Win32DiskImager 无设备 无盘符 无u盘 无优盘 解决方案 之diskpart
    delphi Integer overflow
    MSBuild Tools offline
    delphi synedit免费的拼写检查器dll
    git 自定义命令行
    lua编译
    gcc ar
    Windows Subsystem for Linux (WSL)挂载移动硬盘U盘 卸载 c d 盘
  • 原文地址:https://www.cnblogs.com/jhj117/p/5998048.html
Copyright © 2011-2022 走看看