- 主题:Java农转写cpp发现,写Java比写cpp省心太多了
对啊。。我觉得 java 现在的定位是业务脚本,在这个领域没有比 java 更好更合适的语言了。
高司令的设计功力真是太强,java 永远保持在 java5 的语法也够用一百年。
【 在 javafish (这不是一个昵称) 的大作中提到: 】
: 因为绝大多数JAVA代码都是单一业务回调
: 哪里轮得到自己写服务
: 写个回调想把webserver整垮还是颇有难度的
: ...................
--
FROM 124.72.118.*
异常安全有什么坑吗?
不是抛出 Exception,接收的时候用 Exception & 就行了吗?
【 在 vonNeumann (劣币驱逐良币 | 少灌水) 的大作中提到: 】
: C++ 异常最大的问题是,知道怎样写异常安全代码的程序员太少。。
: 语言本身在降低写异常安全代码的难度这一块也不上心,只会教育人 RAII,又不提供好用点的支持,学 Go 提供一个 defer 也行啊,甚至哪怕加一个 finally 也比现状好
--
FROM 110.81.40.*
你不写 java 吧?
java 后端服务正常的架构就是 nginx + tomcat/jetty, nginx 用于处理并发,10w rps 的话,对于 nginx 也是小 case, 一台笔记本都处理得过来。
后端的 tomcat/jetty, 或者 java 的 servlet 模型就是线程模型,一个请求对应一个线程。当然不是很蠢的来了请求才启动线程,一般用线程池,先启动几百个线程,不够再加。根据业务负载,一台 24 核服务器,能处理几百到几万个请求的都有。
我那个描述不够准确,只是简单讲 java 社区和 cpp 社区的区别。很明显的区别,java 一个请求对应一个线程简单明了,cpp 几万个请求用一个线程异步高效,难以控制。
【 在 refactoring (god) 的大作中提到: 】
: 来一个请求就启动一个线程?你在开玩笑吗?一秒钟启动10万个线程?
--
FROM 112.47.122.*
对。。所以我自己打个广告一下:
我搞的 qtng 网络库,实现了 cpp 下简单易用的协程网络库。目标是写起来比 java 还容易,用起来跟 cpp 以前的网络库一样高效。
https://qtng.org/
为什么说比 java 还容易呢,因为 java 用线程经常要考虑同步,而写协程的话,正常都假定在一个线程里面执行,基本不需要对数据进行加锁。
【 在 leadu (leadu) 的大作中提到: 】
: “java 一个请求对应一个线程简单明了,cpp 几万个请求用一个线程异步高效,难以控制。”
: 这个就是协程的主要价值:写起来像同步的,实际是异步的。一个协程在io操作的时候释放当前线程给别的协程,io操作完毕之后再回来。
--
FROM 124.72.118.*
写网络程序想极限优化,还是得上 c/cpp
不只是计算速度的问题。c/cpp 对内存资源的控制非常精准。
现在写重网络 IO 的程序,用 go 可能是最佳的。计算速度好,资源管理得也不错,社区好开发速度快,其它语言没得打。其次是 python + gevent,计算速度不太行,但资源占用和开发速度也吊打其它主流语言, monkey_patch() 真是神器啊,协议支持也足够丰富。
实在没得选一定要最好的计算速度才用 c/cpp.
用 c#, java 我看都是行为艺术。用 nodejs 的我就不说了。
【 在 leadu (leadu) 的大作中提到: 】
: 我个人觉得c++现在势头不好,除非标准委员会大换血,否则没人愿意再和他们玩了。
: c#的网络都比libuv的快,使用c++没有多少价值了。
: 网络库这块现在欠缺一个好用的高性能的,基于windows rio和linux io_uring的,这块目前可能还有机会。前提是不绑定qt和协程。
: ...................
--
修改:hgoldfish FROM 124.72.118.*
FROM 124.72.118.*
golang 吊打 netty 不是因为性能。。
你可以研究下 golang 社区,,各种奇奇怪怪的网络协议都有人搞,社区资源非常之广。有协程,开发速度和资源占用都非常好。
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: golang绝大部分实现性能刚不过netty……
: netty是个神存在,靠着各种奇技淫巧用java拉出了c的性能
--
修改:hgoldfish FROM 110.81.15.*
FROM 110.81.15.*
对啊。。我最近看一些 P2P 协议,也稍微瞄了一些网关的实现。go 在这方面确实已经形成自己的特色,算是杀手应用了,类似于 python 的 pytorch AI 应用。
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 毕竟golang原生byte[]和struct,外带select
: 折腾底层协议很顺手
: 所以云时代各种容器粘合剂玩到飞起
: ...................
--
FROM 110.81.15.*
首先。。写网络程序的一般没打算跑在 windows 底下。所以 c# 直接忽略吧,吊打天顶星科技也约等于无。dotnet core 也省省吧,二十年前出来很厉害,现在天下已定了。
接下来可以看我上面说的,写网络程序不单只看并发数性能,IO 吞吐,内存资源的控制也很重要。不过我认为最重要的是社区资源。比如你要做个微服务网关,是不是各种协议都有开源的实现,实现的成熟度如何?
总之,综合考虑,golang 最佳。
要是只论性能,我就不会把 python 排到网络程序第二去了。
c/cpp 好处是可以在某个热点进行极限优化。比如我想写个 p2p 网关。用 c/cpp 优化的天花板无限高,直到关键数据用 SIMD ASM 或者托管到网卡搞 zero-copy。而其它语言就不行了。我没说用 c/cpp 就肯定比 java, c# 好。我说的是这个语言可以做到极致。
【 在 leadu (leadu) 的大作中提到: 】
: “写网络程序想极限优化,还是得上 c/cpp”
: 这个是老黄历的想法了,当年情况程序逻辑简单。
: 现在的网络程序复杂多了,很多时候不差c/cpp那几个时钟周。io和线程的对应模型,内存使用,协程和线程的对应等,都会极大的影响结果。
: ...................
--
FROM 110.81.15.*