※ 引述《Lordaeron (Terry)》之铭言:
: CGI 这东西,看了这么多人回,都没人讲出来,表示这边的都是高手了。
: 资O会,以前某套内部的系统是CGI 当底的,后面接的是C。
其实也没有那么陌生,经历过php, Rails时代的人都有被cgi折磨过
只不过现代server side都转向JavaEE那个样子,类似Asp.net那样依附个CGI还是
蛮少见的。
现代的web无论是spring还是go那边都是走向自己从network connection开始管。
(我知道Spring有内置Tomcat)
: 所以, 在这种基本上是I/O bound 的工作面前,用以CPU bound 为强项的语言。
: 是不是大材小用了?
其实C/C++这种可以编译为native code的还是快,但是一般的编写方式用用不上。
网络连线其实没有那么burst的,一堆时间都在idle,不然poll(), coroutines发明
出来做什么。也毕竟是HTTP/2以前的连线非常没有效率,每段msg,先是废话一堆。
gRPC也只是把header的废话个压缩掉。
这也是为什么有javascript来拉json这样的东西出现,web中一堆没有用的资料都是
css这样的东西,真实有用的资料用类似out of band的手段丢一丢还比较快。
就算这个protocol进化到gRPC protobuf那么没有浪费,抱歉现在的socket编程根本
跳不开CPU copy,从Transport layer过来那边kernel给你copy到userspace去,
然后reply的时候又userspace 给copy到kernel去包一包。
我前一段时间想弄个VPN程式看到这边都要吐血了,是有DMA方案啦,DPDK。
没几个平台支援,想要部署到Android或者iOS都不可能。
: 但当我看到它每一个取char * 传进来的字串长度是用sizeof 时,就该明白....赞啦。
: 还好它只是检查它长度是否大于0。
native code的东西对这种memory boundary就很烦,有debug的人会发现,比如在
一个64bits memory的OS上,两个32bits变量我只watch一个,结果旁边variable
动一下,我这边给拉起来。
string判断size一不小心没有null terminator就crash了,string类的function
用之前一定要看看有没有n version, strnlen()就解决问题了没有?
在ptt这样不支援UTF-8的可没有这种好事。
Jave就没有这种烦恼了,也没有Pass by reference这样这的烦恼。
写C++的时候要经常看看是不是move还是copy这种屁事.
: 推 alihue: 推,其实现代 jvm 速度已经没有那么慢了 06/20 08:24
: → superpandal: jvm占用内存阿 外加某些工具启动龟速 运作也马乎也 06/20 10:05
: → superpandal: 没什么优势 06/20 10:06
ART讲内存处理不好是还可以,GraalVM就没这个问题了
至于ready time这个您有load过一堆c++ libraries,要处理symbols也很慢
: 推 brucetu: c++ compile真的是很耽误开发 06/20 11:10
: 推 tsaigi: sizeof XDDD 很有画面 06/20 12:35
: 推 qwe78971: 确实 每次compile 也超耗时 06/20 13:51
C还好,C++真是痛苦,template每次展开都是毁天灭地般的时间。
还好有更糟的rust