- 主题:Java农转写cpp发现,写Java比写cpp省心太多了
能到业务层的早就已经是独立线程了
没机会阻塞真正的网络请求连接
最多影响用户体验
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 请求不能长期占用线程,长耗时IO操作要异步完成,释放本线程
--
FROM 114.86.46.*
全用阻塞IO的话,需要更多的线程啊,而且工作线程池和处理HTTP的线程池有不同策略,放一起不太好
【 在 oldwatch 的大作中提到: 】
: 能到业务层的早就已经是独立线程了
: 没机会阻塞真正的网络请求连接
: 最多影响用户体验
: ...................
--
FROM 27.91.71.*
“java 一个请求对应一个线程简单明了,cpp 几万个请求用一个线程异步高效,难以控制。”
这个就是协程的主要价值:写起来像同步的,实际是异步的。一个协程在io操作的时候释放当前线程给别的协程,io操作完毕之后再回来。
【 在 hgoldfish 的大作中提到: 】
: 你不写 java 吧?
: java 后端服务正常的架构就是 nginx + tomcat/jetty, nginx 用于处理并发,10w rps 的话,对于 nginx 也是小 case, 一台笔记本都处理得过来。
: 后端的 tomcat/jetty, 或者 java 的 servlet 模型就是线程模型,一个请求对应一个线程。当然不是很蠢的来了请求才启动线程,一般用线程池,先启动几百个线程,不够再加。根据业务负载,一台 24 核服务器,能处理几百到几万个请求的都有。
: ...................
--
FROM 123.115.136.*
对。。所以我自己打个广告一下:
我搞的 qtng 网络库,实现了 cpp 下简单易用的协程网络库。目标是写起来比 java 还容易,用起来跟 cpp 以前的网络库一样高效。
https://qtng.org/
为什么说比 java 还容易呢,因为 java 用线程经常要考虑同步,而写协程的话,正常都假定在一个线程里面执行,基本不需要对数据进行加锁。
【 在 leadu (leadu) 的大作中提到: 】
: “java 一个请求对应一个线程简单明了,cpp 几万个请求用一个线程异步高效,难以控制。”
: 这个就是协程的主要价值:写起来像同步的,实际是异步的。一个协程在io操作的时候释放当前线程给别的协程,io操作完毕之后再回来。
--
FROM 124.72.118.*
await是不保证同一函数前后pid一致的,这是一种语言特性,用库做不了啊
【 在 hgoldfish 的大作中提到: 】
: 对。。所以我自己打个广告一下:
: 我搞的 qtng 网络库,实现了 cpp 下简单易用的协程网络库。目标是写起来比 java 还容易,用起来跟 cpp 以前的网络库一样高效。
:
https://qtng.org/: ...................
--
FROM 155.64.23.*
我个人觉得c++现在势头不好,除非标准委员会大换血,否则没人愿意再和他们玩了。
c#的网络都比libuv的快,使用c++没有多少价值了。
网络库这块现在欠缺一个好用的高性能的,基于windows rio和linux io_uring的,这块目前可能还有机会。前提是不绑定qt和协程。
【 在 hgoldfish 的大作中提到: 】
: 对。。所以我自己打个广告一下:
: 我搞的 qtng 网络库,实现了 cpp 下简单易用的协程网络库。目标是写起来比 java 还容易,用起来跟 cpp 以前的网络库一样高效。
:
https://qtng.org/: ...................
--
FROM 123.115.136.*
写网络程序想极限优化,还是得上 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.*
什么叫网络程序极限优化?直接调用libcurl用什么语言都一样,反正瓶颈代码都是一样的。
目前标准下cpp对跨线程资源管理还是不够的,A线程分配的资源在B线程释放这个典型协程应用是很不好处理的
【 在 hgoldfish 的大作中提到: 】
: 写网络程序想极限优化,还是得上 c/cpp
: 不只是计算速度的问题。c/cpp 对内存资源的控制非常精准。
: 现在写重网络 IO 的程序,用 go 可能是最佳的。计算速度好,资源管理得也不错,社区好开发速度快,其它语言没得打。其次是 python + gevent,计算速度不太行,但资源占用和开发速度也吊打其它主流语言, monkey_patch() 真是神器啊,协议支持也足够丰富。
: ...................
--
FROM 27.91.71.*
感觉标准委员会有个不好的错觉是,因为自己牛逼所以C++才有今天。但实际上C++一直靠的是工业界给标准擦屁股。现在rust,java,C#,js都打出各自天地了,标准委员会就只能自己玩了
协程module之类的如果在2010年一次性做利索而不是2020年才部分支持,C#,java会大受打击,golang大概不会有人听说
【 在 leadu 的大作中提到: 】
: 我个人觉得c++现在势头不好,除非标准委员会大换血,否则没人愿意再和他们玩了。
: c#的网络都比libuv的快,使用c++没有多少价值了。
: 网络库这块现在欠缺一个好用的高性能的,基于windows rio和linux io_uring的,这块目前可能还有机会。前提是不绑定qt和协程。
: ...................
--
FROM 27.91.71.*
golang绝大部分实现性能刚不过netty……
netty是个神存在,靠着各种奇技淫巧用java拉出了c的性能
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 写网络程序想极限优化,还是得上 c/cpp
: 不只是计算速度的问题。c/cpp 对内存资源的控制非常精准。
: 现在写重网络 IO 的程序,用 go 可能是最佳的。计算速度好,资源管理得也不错,社区好开发速度快,其它语言没得打。其次是 python + gevent,计算速度不太行,但资源占用和开发速度也吊打其它主流语言, monkey_patch() 真是神器啊,协议支持也足够丰富。
: ...................
--
修改:oldwatch FROM 117.136.120.*
FROM 117.136.120.*