“写网络程序想极限优化,还是得上 c/cpp”
这个是老黄历的想法了,当年情况程序逻辑简单。
现在的网络程序复杂多了,很多时候不差c/cpp那几个时钟周。io和线程的对应模型,内存使用,协程和线程的对应等,都会极大的影响结果。
1. io和线程的对应模型,这个不多说了,每个语言都要调用os的,都差不多。c/cpp会好几十个时钟周。
2. 内存使用问题,
https://devblogs.microsoft.com/dotnet/system-io-pipelines-high-performance-io-in-net/只看他提出的问题即可。c/cpp这块可以做的很好,但我知道的库做的都不好
3. 协程和线程的对应。线程池是仅可以在网络这块使用还是可以全局使用,比如是不是可以用于磁盘和db,甚至rpc。
线程池使用范围越大,应用整体吞吐越好。cpp这块屎一样。
至于现在网络程序哪个编程语言快,网上都有测评,比自己瞎感觉客观很多
https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=plaintext
c#在刚才说的第1点和第2方面都做的不好,1处没有用rio,2没有做zero alloc。
c#现在做的马马虎虎都排到了性能第二,而且现实情况会比测评复杂很多,会进一步拉大第3点的差距
现在复杂系统中性能瓶颈不在c/cpp那几个时钟周的优化上,情况不一样了
【 在 hgoldfish 的大作中提到: 】
: 写网络程序想极限优化,还是得上 c/cpp
: 不只是计算速度的问题。c/cpp 对内存资源的控制非常精准。
: 现在写重网络 IO 的程序,用 go 可能是最佳的。计算速度好,资源管理得也不错,社区好开发速度快,其它语言没得打。其次是 python + gevent,计算速度不太行,但资源占用和开发速度也吊打其它主流语言, monkey_patch() 真是神器啊,协议支持也足够丰富。
: ...................
--
FROM 123.115.136.*