V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  coder001  ›  全部回复第 2 页 / 共 5 页
回复总数  92
1  2  3  4  5  
336 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907
那就简单来说说 (^ o ^)ノ

测试环境是 linux k8s 集群,所在节点 4 核 16G (后来加到了 8 核),非独占,还有一些其他东西跑,但不占太多 CPU

最开始的版本是图省事,嫌复杂懒得用 SocketAsyncEventArgs ( SAE ),监听开单线程阻塞,接收就用 Socket.Select 方法批量轮询,把筛出来的 Socket 滥用 Task.Run 处理接收和协议解析,可以想象线程池会有多窘迫,再多的 MinThread 也处理不过来,只会徒增 CPU 使用率。

单线程阻塞监听真是太天真了,大量 TCP 同时发起的时候根本 accept 不过来,后来改用 SAE 监听,一上来就安排 1024 个躺在端口前迎接,回调不直接处理,而是放进自己创建的工作线程排队创建应用层会话,加入会话管理器。这下几乎没有连不进去的了。

后来多几次改进调优就变成完全 SAE 了,监听和接收还有发送全都走 SAE ,只是 SAE 的回调依旧信不过,不在这里做过多的处理,而是自己开线程排队,也能观测一下队列数量来评估性能。

总算是稍微拯救了一下这难看的数据。

要问为什么自己撸 Socket 而不用现成框架,我不想回忆被 SuperSocket 折磨的那些年 _(:з)∠)_
辩解:协议单一,而且相对简单,可以自己来❌
336 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907
目前性能数据已经可以接受,就不放出来丢人现眼了 _(:з)∠)_
336 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #50
@liuhan907 #51
先谢过两位

目前用若干个绑定了队列的线程,每次有回调就挑队列长度最短的分配工作项,压测看起来数据没这么难看了
压测用 5 万个 TCP 同时打进去,PPS 没测量,几乎所有 PDU 都小于 1400 ,姑且按 PDU 计算的话,极端状况下往返加起来可能会达到( x4 ) 20 万 PDU 每秒。
协议超时时间是 30 秒,但超过 10 秒就会被称为数据不好看
337 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #45
当然尝试设置最小线程数量,但收效甚微,而且 CPU 使用率显著上升
337 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@liuhan907 #28

吾辈在 TCP 异步 Socket 高并发的情况下滥用了异步回调处理收到的数据,响应时间拉长到无法接受,排查发现是调度延迟。
后来在 SocketAsyncEventArgs 回调把要处理的东西封装成工作项,放进自己维护的线程,用线程安全队列排队处理,这才扛得起来。

这算 CPU 密集吗🤔 (不过这倒是和主题的物联网沾上边了
338 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
@INCerry #11 WOW ,看来我井还没有没落,没太仔细读回帖就先莽了
建议不要太过于 “迷信”(🤔?) Task/async/await 的调度机制,到头来可能还不如自己撸线程来的快 :p
338 天前
回复了 unt 创建的主题 程序员 Java Go Node 哪种语言最适合做物联网平台开发
看来用 dot net core 的只有我一个?
套一层 OpenVPN
2023-02-02 13:42:46 +08:00
回复了 x500 创建的主题 程序员 请教:有什么办法能比较 2 个电脑上的文件夹?
smb+freefilesync
2022-12-30 13:53:54 +08:00
回复了 dicc 创建的主题 问与答 求推荐一个这样的画图插件,web
也可以试试 draw.io
2022-12-21 17:28:46 +08:00
回复了 jjrow 创建的主题 程序员 程序员怎么做到每天运动,出点汗
@paradox8599 #22 同 beat saber 。有个叫做 YUR 的 mod 可以追踪卡路里
2022-11-10 13:08:33 +08:00
回复了 ColinZeb 创建的主题 全球工单系统 Win10 LTSC 内存溢出这么严重
https://learn.microsoft.com/en-us/sysinternals/downloads/rammap
OP 可以试试用 RAMMap 来分析一下内存使用情况,通常它能解决你的疑惑
这是被微软吞并的小团队 Sysinternals 出品的实用工具包成员之一
OP 可以试试 TIM ,没有广告,甚至连 qq 秀之类的娱乐功能统统都没有,表面上是干净的 IM ,至于背地里就不评价了
2022-10-25 10:22:43 +08:00
回复了 lookStupiToForce 创建的主题 程序员 不会前端的后端如何优雅地开发个人项目?
答案:使用 Blazor 。
前后端都是 C♯,只需要糊部分 JavaScript 就可以用起来,干了好多年的 .NET 后端, 总算盼到能在浏览器运行 C♯ 代码了。
目前已经做了多个玩具项目,并且有应用在商业项目的打算
也可以试试 WinForms 的 BlazorWebView

https://learn.microsoft.com/en-us/aspnet/core/blazor/hybrid/tutorials/windows-forms?view=aspnetcore-6.0

最近也有打算做个玩具
2022-09-30 01:04:51 +08:00
回复了 strp 创建的主题 .NET WIndows 上的.NET 程序集缓存需要清理吗?
这时候就需要发挥 NTFS 的文件系统压缩功能了,compact 命令有个压缩级别 /exe:LZX 用在 program files 之后能给系统盘腾出很多空间,而且压缩后的软件启动时间也没有增加的感觉
2022-09-18 20:02:10 +08:00
回复了 coder001 创建的主题 全球工单系统 微信小程序挂了?
似乎已经恢复,至少我这儿看起来正常了
虽然不太清楚 OP 的需求,如果没了解过 Harmony 的话,可以看看
这个库经常被拿来做 Unity 游戏 Mod ,可以运行时替换方法或者操作码( IL 指令)
https://github.com/pardeike/Harmony

我甚至用来给系统基础类库打补丁,有个 Winform 控件的默认实现有不符合预期,给补丁掉了
https://topcl.net/custom-technology/painless-fix-BUG-in-winform-NumericUpDown-Hexadecimal-mode.html
2022-04-12 09:22:02 +08:00
回复了 yuhangch 创建的主题 .NET EF Core LINQ 使用反射获取属性值大幅降低查询速度
在 IQueryable<T>用 AutoMapper 的 Projection 方法,可以生成查询表达式实现按需 Select
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   970 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 22:04 · PVG 06:04 · LAX 15:04 · JFK 18:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.