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的模块应该可以解决之。

转: 在创业公司使用C++的更多相关文章

  1. [转] 从知名外企到创业公司做CTO是一种怎样的体验?

    这是我近期接受51CTO记者李玲玲采访的一篇文章,分享给大家. 作者:李玲玲来源:51cto.com|2016-12-30 15:47 http://cio.51cto.com/art/201612/ ...

  2. PHP极客水平测试——给创业公司用的远程面试题

    出了份面试题<PHP极客水平测试>,创业公司可以用这个远程笔试啦,先答题,看答案合适了再邀请面试.希望对创业公司有所帮助,欢迎围观提建议哦^_^ 题目会持续更新. 答题地址:http:// ...

  3. 《Hey程序员 你适合加入创业公司吗?》再补充

    笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...

  4. 创业15条经验总结:温饱之后,创业公司CEO如何树“三观”?

    都说创业改变命运,事实上不是,创业,时时刻刻,可能连“命”都保不住!创业公司最重要的只有“活下去”.满足了这个.才有资格谈其他.公司连饭都开不了,还谈什么其他?创业公司如果连生存问题都解决不了,高位的 ...

  5. 创业草堂之二十二:创业公司C类官员的职位说明书

    麻雀虽小,五脏俱全. 创业公司启航,三五十来个人.七八条枪,其中“C”字开头的官儿还真少不了 – CEO.CTO.COO.CFO.CMO.CIO.CCO.CLO.Chairman/Chairwoman ...

  6. 创业公司Playcafe关门大吉 创始人总结10大失败教训

    导读:互联网电视游戏网站PlayCafe的创始人马克·高登森(Mark Goldenson)日前撰文,总结了自己创业失败的十个教训.以下为文章主要内容: 一年半前,我与公司联合创始人戴维·奈格(Dev ...

  7. 【转】傅盛:怎样做一个创业公司CEO?

    摘要 : 傅盛High聊会,泉灵姐姐给的命题作文.怎样做一个创业公司CEO,核心还是思维模式. 这次傅盛High聊会,泉灵姐姐给我的命题作文.创业要如何开始,本质还是思维模式.首先学会把一个开放式问题 ...

  8. 迅雷创始人程浩:创业公司5招做好内部创新(组建小型敢死队:一共3个人,一个产品经理,两个研发;腾讯做不做这个项目是一个伪命题;让用户来验证,而不是相反 good)

    欢迎关注“创事记”的微信订阅号:sinachuangshiji 文/程浩 编者按:本文首发于微信公众号“浩哥说”(ID:haogetalks),作者程浩,迅雷创始人.内容为作者在混沌AI成长营上的演讲 ...

  9. 给你讲个笑话,我是创业公司CEO

      文/办公室奇葩说(Office 78)一个在办公室较为正经的八卦号. 前几天你看见朋友圈刷屏的文章<给你讲个笑话:我是做互联网的>. 你心想,写文章的那人是傻逼吗?觉得做互联网就是个笑 ...

随机推荐

  1. 基于UML项目的分析与设计

    1,概述 项目中需求和设计的文档是必然的,UML工具可以帮助指导我们从不同的角度去看待一个新的系统,并把这个系统分解剖析出来.本篇文章主要讲述的是如何将UML应用到项目的开发工作中,关于如何学习UML ...

  2. RunLoop机制理解

    一.浅识RunLoop RunLoop在开发中我们一直在用,但是没有注意他.要想理解RunLoop,首先我们需要先了解一下程序运行机制. 程序运行机制:我们都知道OC是运行时语言,也就是说对象的类型是 ...

  3. iOS Xcode7上真机调试

    在Xcode7上进行真机调试,不需要证书,步骤如下: 1. 2. 3. 4. 5.添加Apple ID后会显示两个Free,表示可以免费真机调试iOS应用和Mac应用,选中高亮选项,点击view de ...

  4. win7 解决git clone 连接被拒绝—hosts文件过期

      我出现问题的原因是自己修改过 C:\Windows\System32\drivers\etc\HOSTS, 把同事的这个文件拷贝过来后,一切恢复了正常   错误在eclipse中表现为:     ...

  5. Eclipse 导入项目后启动报异常:java.lang.UnsatisfiedLinkError: Native Library *.dll already loaded in another classloade 解决方法

    tomcat 服务器的配置信息如下:

  6. swap分区

    swap分区 一块的新加进来的硬盘,我们要怎么给它创建swap分区呢?要遵循下面四个步骤: (1)使用一个现有的分区,比如记为A (2)然后分区类型的16进制编码,即A的16进制编码. (3)格式化A ...

  7. rowcount和@@Rowcount的区别,获取insert、update、delete影响行数

    rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10select * from 表A 这样的查询只会 ...

  8. c#,关于Big Endian 和 Little Endian,以及转换类

    Big Endian:最高字节在地址最低位,最低字节在地址最高位,依次排列. Little Endian:最低字节在最低位,最高字节在最高位,反序排列. 当在本地主机上,无需注意机器用的是Big En ...

  9. 使用cxf构建webservice

    一.简介 cxf是apache下的一个开源的,功能齐全的WebService框架.是由Celtix和XFire两个开源框架组合而成.cxf可以帮助我们使用前端编程模型构建和开发服务,如JAX- WS和 ...

  10. Android 渗透测试学习手册 翻译完成!

    原书:Learning Pentesting for Android Devices 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 赞助我 协议 CC BY-NC-SA 4. ...