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. Cache&Session Viewer

    用于查看和删除网站Cache https://github.com/sdf333/Aspy

  2. CSS3中的calc()

    什么是calc()? calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能; MDN的解释为可以用在任何长度,数值,时间,角度,频率等处; /* property: calc ...

  3. android拍照选择图片上传服务器自定义控件

    做android项目的时候总免不了遇到图片上传功能,虽然就是调用android系统的拍照和相册选择功能,但是总面部了把一大推代码写在activity里,看上去一大推代码头都昏了.不如把这些功能都集成一 ...

  4. 嵌入式调试器原理和各类调试器集锦(JLINK、STLINK、CCDEBUG)

    工欲善其事,必先善其器.调试器在嵌入式开发调试中的重要性不言而喻,单步.断点和监察的效率远高于串口打印.但是,调试器对于一般开发人员往往是一个黑匣子.今天我们就来谈谈调试器的原理,顺便把自己的几类调试 ...

  5. fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Dev

    类似这样的错误: fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.pla ...

  6. nodejs socket

    server.js var net = require('net'); var clientList = []; var HOST = '127.0.0.1'; var PORT = 6969; va ...

  7. iOS开发笔记8:Remote Notification远程消息推送处理

    远程消息推送处理场景有三种:分别是app还没有运行.app在前台运行以及app在后台运行,下面介绍相关流程及三种场景下处理步骤 1.流程 (1)注册通知 首先是在注册远程消息推送,需要注意的是iOS8 ...

  8. jquery miniui , 普加甘特图,流程管理

    http://www.miniui.com/docs/quickstart/index.html 普加 甘特图 流程管理 http://www.plusgantt.com/project/demo/P ...

  9. Memcache限制端口和访问IP

    Memcache安装十分简单,默认情况下是任何人都可以访问服务器上缓存的数据,所以如果不作处理的话 是很不安全的(乌云上已经提交有很多与此相关的问题) 1.首先要保证服务器上的防火墙都是开启的 2.设 ...

  10. javascript元素绑定事件

    js元素绑定事件   想给一个元素绑定一个方法之后,在绑定一个方法而且不被覆盖 window.onload = function () { alert('a'); } window.onlaod=fu ...