找回密码
 立即注册
搜索
查看: 2865|回复: 22

[其他] c# 求助,TCP服务器性能问题

[复制链接]
头像被屏蔽
     
发表于 2021-7-15 14:53 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-15 15:21 | 显示全部楼层
NetworkStream.Read()不是non-blocking的,socket没数据的时候NetworkStream.Read()不会立刻return 0,而是一直block住到timeout
用NetworkStream.DataAvailable 做判断条件

有问题先看文档
https://docs.microsoft.com/en-us ... Int32_System_Int32_
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-15 15:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-15 15:26 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-15 15:30 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-15 15:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-15 15:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-15 16:27 | 显示全部楼层
本帖最后由 Damenly 于 2021-7-15 16:30 编辑

buffer是在内存里的,几十个客户端也不会吃内存,所以应该不是磁盘的问题。 固定下每个client发的数据大小看看?非csharp程序员,还有如果真如楼上所说这个read是blocking有一定timeout了,我都怀疑是不是这个read 是不是busy waiting,文档一句没写

回复

使用道具 举报

     
发表于 2021-7-15 16:33 | 显示全部楼层
前面没注意到你就是要block

你用的是Task.Run(),它不一定会开新线程,很有可能你好几个客户端连接的task是在同一个线程里处理的。
一个task在Read这里block了,是否会马上切换到下一个task,我不清楚
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-15 23:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-16 00:16 来自手机 | 显示全部楼层
hourousha 发表于 2021-7-15 23:30
没记错的话.net core里l的异步tcp在linux中是用epoll实现的,其他怎么实现不清楚。也许实现的有问题,还是 ...

我觉得Task有问题的可能性还是比较大啊

这个Task内部的方法是阻塞的,而且执行时间很长
Task的背后是线程池,同时执行的数量是有上限的,系统自动控制
这里应该设置成Long running,具体有什么用我倒是忘了

其实这边我建议用Thread手动控制线程,既然想要一一对应
Task内部有很多东西是看不出来的

— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.4.4.1
回复

使用道具 举报

     
发表于 2021-7-16 00:28 | 显示全部楼层
感觉是到线程池数量上限了,前面的task都block住了,线程让不出来,新的task都queue住了

回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-16 00:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-16 01:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-16 10:01 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-16 10:20 | 显示全部楼层
长运行为什么不用 线程 wait awake 的机制?
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-16 14:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-16 17:43 来自手机 | 显示全部楼层
hourousha 发表于 2021-7-16 14:33
线程池耗尽的问题,可以某种意义上用LongRunning的TaskCreateOption来解决。
但这本身并不是解决这个(多 ...

我只是说Task的问题
他这么写和网络没关系,只要是有大量Task就会遇到

— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.4.4.1
回复

使用道具 举报

     
发表于 2021-7-16 20:24 | 显示全部楼层
为啥不异步呢
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-16 20:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-7-16 23:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-7-16 23:46 来自手机 | 显示全部楼层
IO不异步,天理难容…
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2021-7-16 23:56 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-7-19 14:50 , Processed in 0.158154 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表