V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
PendingOni
V2EX  ›  程序员

[疑惑]-C#中一个奇怪的现象

  •  
  •   PendingOni ·
    Komi-Thaw · 2022-09-14 06:25:16 +08:00 · 2407 次点击
    这是一个创建于 828 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天使用 MQTT 模拟数据发送报文到指定的端口上,代码里面有个地方用了 while loop 确保生成多个 TcpClient 监听 6300 端口,发现一个奇怪的事情,如下图: 企业微信截图_16630757925792.png

    企业微信截图_16630759253353.png

    目前,一切顺利,不过等等?为什么这个控制台打印语句只运行了一次??? 之后我把 client 的变量拿到了 while loop 的外面,导致 CPU 占用飙升...

    企业微信截图_16630758459661.png

    企业微信截图_16630760043850.png

    这是我今天遇到的最邪门的事情了...

    14 条回复    2022-09-14 10:06:02 +08:00
    aragakiyuii
        1
    aragakiyuii  
       2022-09-14 07:16:23 +08:00 via iPhone   ❤️ 1
    accept 这种方法应该都会阻塞当前线程的吧
    PendingOni
        2
    PendingOni  
    OP
       2022-09-14 07:26:01 +08:00
    @aragakiyuii 说到点子上了
    PendingOni
        3
    PendingOni  
    OP
       2022-09-14 07:34:02 +08:00
    那一行感觉是在等待数据包的传入所以可能会阻塞当前的线程...
    PendingOni
        4
    PendingOni  
    OP
       2022-09-14 07:41:31 +08:00
    thinkershare
        5
    thinkershare  
       2022-09-14 08:02:45 +08:00
    这个玩意那里邪门了? 本来就是这样设计的
    PendingOni
        6
    PendingOni  
    OP
       2022-09-14 08:03:37 +08:00
    @thinkershare 当时确实觉得邪门
    Jirajine
        7
    Jirajine  
       2022-09-14 08:40:54 +08:00
    显然 accept 调用的时候阻塞等待了,至于拿到外面去,死循环里空转,可不就 CPU 飙升么。
    lixingcong
        8
    lixingcong  
       2022-09-14 09:20:39 +08:00
    7 楼 Jirajine 说得对,不光是 C#,别的语言都是这么设计的 accept 阻塞。
    Eiden
        9
    Eiden  
       2022-09-14 09:22:45 +08:00
    mqttnet 不好用吗
    PendingOni
        10
    PendingOni  
    OP
       2022-09-14 09:22:46 +08:00
    @lixingcong 主要还是 Socket 就是这么设计的
    timethinker
        11
    timethinker  
       2022-09-14 09:33:53 +08:00   ❤️ 1
    C#的 Socket 光是异步的写法目前就有 3 种编程模型:

    APM:即 BeginXXX 和 EndXXX 配对使用的异步编程模型。
    EAP:即基于事件的异步模式,也就是使用 SocketAsyncEventArgs 配合 Socket 的 XXXAsync 系列方法使用。
    TAP:既基于任务的异步模式,最新的使用方法,不再需要 SocketAsyncEventArgs ,直接返回 Task/ValueTask 配合异步上下文使用 await/async 语法。
    nba2k9
        12
    nba2k9  
       2022-09-14 09:46:27 +08:00
    对不起问一下楼主用的是什么字体,挺好看的
    PendingOni
        13
    PendingOni  
    OP
       2022-09-14 09:54:58 +08:00
    @nba2k9
    Rider 主题:Kuro
    Rider 字体:Fira Code 15 号大小 开启 ligature 显示模式
    没什么对不起的.
    VictorJing94
        14
    VictorJing94  
       2022-09-14 10:06:02 +08:00
    while loop...死循环不带休眠时间....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4605 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 09:55 · PVG 17:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.