c++写后端程序响应速度强无敌

2019-08-22 18:28:50 +08:00
 mq4079

这两天用 c++重写了一段用 node 写的后端程序,相同的业务逻辑,mongodb 的 CURD 操作之类的,没用奇巧淫记没有任何优化,编译出来的程序响应速度实测比 node 快 10 倍左右,虽然 c++写起来麻烦一点点但为了性能还是 ok 的,v 友门公司用 c++写后端的多吗?

20344 次点击
所在节点    C++
117 条回复
flyxl
2019-08-23 13:11:00 +08:00
@mq4079 从浏览器请求响应时间得出数据库 io 效率 10 倍差距,这个结论不专业呀,一个 http 请求经过那么多的处理,比如 json 编解码,比如 http 响应解析,还有业务逻辑处理等等,这中间的任何一步都可能成为性能瓶颈啊
killerv
2019-08-23 13:12:45 +08:00
@dosmlp 没有业务场景,单纯对比语言的快慢这个测试肯定是差距很大的,但是真正的业务,瓶颈一般都在 io,比如说一次请求,数据库查询耗时 20ms,A 语言处理比 B 语言快 10ns,肯定有提升,但是并不明显。
augustheart
2019-08-23 13:14:34 +08:00
所以破案了?
fakeshadow
2019-08-23 13:23:33 +08:00
同推荐楼主试试 rust
nigelvon
2019-08-23 13:45:44 +08:00
如果不是密集运算型不可能差这么多的,听你的描述仅仅是从 mongodb 获取数据的,别说 10 倍了,我觉得差两倍都不正常。不如把代码贴出来看看。
no1xsyzy
2019-08-23 14:28:56 +08:00
@mq4079 那你测试有没有用 time ?看一下 system 时间和 user 时间?
no1xsyzy
2019-08-23 14:33:58 +08:00
@augustheart 确实远了,不过如果不把程序员当控制变量而当随机变量的话,其实写出来的代码孰快孰慢还不一定。
我写惯了高级语言的函数式计算结果换 C 写了个非常低效率的算法……
fox1955
2019-08-23 14:44:24 +08:00
mongoose 构造 schema 对象是耗时操作,破案还需 lz show code.
spotfg
2019-08-23 14:59:15 +08:00
@flyingghost
凌晨三点的办公室灯火通明,
Ruby 开发者在解决性能问题,
Python 开发者在拿游标卡尺量缩进,
JavaScript 开发者在 npm 上找包,
C 开发者在解决内存泄漏,
C++ 开发者在编译,
Java 开发者在各种 Factory,
Rust 开发者在研究怎么通过编译,
Go 开发者正在 if err != nil,

原文
gtlions
2019-08-23 15:03:00 +08:00
@augustheart
Python 程序正在寻找 Bug
Go 程序员正在拼写_,_=
danc
2019-08-23 15:13:51 +08:00
所以嘛,@augustheart 大佬,Rust 究竟是有多难,让你两次入门到放弃。我当初学 Rust 好像挺快的啊。
ipwx
2019-08-23 15:20:21 +08:00
哎,楼上一堆喷 C++ IO 不行的,怕不是没见过优化到极致的 C++ 程序。

一切别的语言能用的技术,C++ 都能用,只不过要花更多的编码时间罢了。
====

而且另一方面,SQL 数据库的瓶颈一般不在客户端的 IO,在于数据库服务器本身。
augustheart
2019-08-23 15:21:13 +08:00
@danc 我说了啊,没有动力。本来就是玩儿的。
这破库居然要 nightly,mlgb,不玩了。
调个 win api,这么麻烦?滚蛋,直接上 c++
我以前自己拿 c++写了个简陋的音乐播放器,某晚突然心血来潮想 rust 重写,写了个 winmain,wrnmd,这么啰嗦?不干了……
然后……
ipwx
2019-08-23 15:21:49 +08:00
C++ IO,优化到极致,实现方式据我所知就有两种:

1、libevent (epoll)。2、boost::asio。

而后者是 Node.js 回调地狱的 C++ 版。你说,技术手段都一致了,C++ 更快有什么奇怪的。
blless
2019-08-23 15:23:11 +08:00
go 我觉得有 c c++60%-80%的性能 甚至还内置了汇编
60%-80%的 python 开发效率,已经很爽了
rust 嘛…看完教程的功夫我得 go web 已经写完了
augustheart
2019-08-23 15:26:18 +08:00
@ipwx 没人喷 c++的 io 不行吧……
b00tyhunt3r
2019-08-23 15:55:53 +08:00
@no1xsyzy :
“另外一些 函数式语言也能生成高效的代码,比如 OCaml。在一次程序语言暑期班上,Cornell 的 Robert Constable 教授讲了一个故事,说是他们用 OCaml 重新实现了一个系统,结果发现 OCaml 的实现比原来的 C 语言实现快了 50 倍。经过 C 语言的那个小组对算法多次的优化,OCaml 的版本还是快好几倍。这里的原因其实在于两方面。第一是因为函数式语言把程序员从底层细节中解脱出来,让他们能够迅速的实现和修改自己的想法,所以他们能 够迅速的找到更好的算法。第二是因为 OCaml 有高效的编译器实现,使得它能生成很好的代码。”

===========
这段怎么查不到英文原文
no1xsyzy
2019-08-23 15:59:43 +08:00
@b00tyhunt3r 因为是中文使用者写的博客,原文又删贴了,地址没存不然还可以去 Web Archive 找到,现在就是找起来有点麻烦
dosmlp
2019-08-23 16:12:58 +08:00
@ipwx linux 上 epoll 不是极致,dpdk 才是,Windows 的 iocp 也不是极致而是 rio
磁盘 io 一般也会用内存映射避免内核中进行内存拷贝
b00tyhunt3r
2019-08-23 16:28:18 +08:00
@no1xsyzy
用关键词查谷歌 Cornell Robert Constable Ocaml 也没找到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/594287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX