V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
h404bi
V2EX  ›  Windows

Windows Terminal 的性能有多烂

  •  1
     
  •   h404bi · 2021-07-05 12:43:45 +08:00 · 13231 次点击
    这是一个创建于 997 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Casey Muratori 最近在 Windows Terminal 的 GitHub issue tracker 发了一个反馈—— Extremely slow performance when processing virtual terminal sequences,表达了对 WT 性能的关注,他还写了一个 benchmark 程序 TermBench 来测试 WT 的渲染性能具体有多差(根据 Casey 表述,达到了惊人的 2 fps)。

    issue 中 WT 的 member 们不断回复讨论“说明解释”运行慢的理由,后来为了避免讨论失控,给出了有意思的「 because we've made it hard, not because of some intrinsic quality of the universe. 」结论。不过还是未能说服 Casey,进一步激烈的讨论后 Casey 得到了「 what you’re doing is describing something that might be considered an entire doctoral research project in performant terminal emulation as “extremely simple” somewhat combatively. 」的论断,被认为把事情看得过于简单,因为终端性能这件事能作为 PhD 项目了。

    Casey 当然不服,但 issue 已经被锁了。于是他在他的 Handmade Hero 频道上“罕见地”发布了一名为 How fast should an unoptimized terminal run? 的与 HandmadeHero 无关的视频(还调侃地写上了 Terminal PhD Dissertation )来论述 WT 到底有多慢,它能有多快:

    https://www.youtube.com/watch?v=hxM8QmyZXtg

    除了视频,还给出了相应的参考实现 RefTerm: https://github.com/cmuratori/refterm 作为对比。

    Hacknernews 上也有对此的讨论串 https://news.ycombinator.com/item?id=27725133,虽然并没有太多讨论,但也有些挺有意思的,比如「 ... if your team lacks anyone with that intuitions, your team will spend their time finding “explanations” for the bad performance instead of fixing it. 」。

    整个事件看下来,我对最近发布的 Windows 11 也有了新的感慨——无论再怎么更新,它依旧是一座大屎山,有些东西就是长年无法改变的,看看这个回复回复就知道。(逃)


    Casey Muratori 是谁?

    Casey Muratori 是一名经验丰富的游戏引擎开发者,参与过多款知名游戏的研发。他也是 Handmade Hero 项目的作者,如果你不了解 Handmade Hero,可以去搜索了解下。这个非常硬核的教学向项目发起于 2014 年,目标是不使用任何引擎,从头手写每一行代码来学习做出一款游戏。每周进行更新,至今已坚持近 7 年之久,超过 600 集视频,还衍生出如 4coder 等实际生产可用的项目。

    第 1 条附言  ·  2021-07-05 23:38:37 +08:00

    贴一些原 issue 之后的内容,感兴趣可以继续了解:

    1. https://twitter.com/cmuratori/status/1411437902802808832
    2. microsoft/terminal Issue #10461
    3. microsoft/terminal Issue #10462
    4. handterm

    Be nice and make things better.

    80 条回复    2021-09-10 21:02:09 +08:00
    NilChan
        1
    NilChan  
       2021-07-05 12:53:47 +08:00 via Android
    火钳留名?
    ncepuzs
        2
    ncepuzs  
       2021-07-05 12:58:02 +08:00   ❤️ 10
    "…无论再怎么更新,它依旧是一座大屎山,有些东西就是长年无法改变的…"

    —— 认同
    Helsing
        3
    Helsing  
       2021-07-05 12:59:03 +08:00 via iPhone
    别说性能,我现在 wsl2 的 adb 都没搞定
    sneezry
        4
    sneezry  
       2021-07-05 12:59:04 +08:00 via iPhone   ❤️ 1
    如果社区能抓出 WT 的小尾巴“这里你们微软的工程师居然这么写,性能不差才怪”就比较精彩了
    h404bi
        5
    h404bi  
    OP
       2021-07-05 13:26:19 +08:00 via iPhone
    @sneezry 其实要能抓出来了,并且项目方认可接受,可以改得过来那还是很好的。不过有时候得到的是所谓的理由和阻碍,那就挺难了。
    byte10
        6
    byte10  
       2021-07-05 13:48:46 +08:00
    我都百度不出来了。为啥一个终端还有性能的问题?不就是 shell 终端吗?会有啥性能的问题。啥场景
    Tumblr
        7
    Tumblr  
       2021-07-05 14:00:07 +08:00
    诶~ 这个瓜有意思了,关注 ing

    其实说到多色输出的性能,可能要问一下“一个 terminal 是否对这方面有要求呢?”

    比如有一次我看到我朋友的电脑说“这么慢你也受得了”,他说“我也就偶尔查个东西打点资料,平时也不怎么用”。我确实觉得他电脑确实该升级优化了,但是他觉得用着挺好的……

    BTW,借楼问一下,kcg/s 是个什么单位?我用 Casey 的那个工具,c 语言版本的基本上在 80kcg/s,msvc 的基本在 70kcg/s 。 ( color per character )
    thefack
        8
    thefack  
       2021-07-05 14:06:51 +08:00
    我想说偶尔 PS 打开要等 5 秒以上是什么情况,虽然启动时要加载一个自己编写几个 function,也不至于这么慢啊
    Kobayashi
        9
    Kobayashi  
       2021-07-05 14:10:50 +08:00 via Android   ❤️ 7
    友情提示:
    1. 标题以偏盖全,原文性能差只针对彩色字符渲染
    2. 没有浏览完整 issue 希望您能谨慎评论。

    隔行如隔山,我不懂游戏渲染也不懂终端字符渲染就不说啥了。
    b1iy
        10
    b1iy  
       2021-07-05 14:35:16 +08:00
    一个免费的东西,对我来说完完全全够用,我喜欢就行了。
    hafuhafu
        11
    hafuhafu  
       2021-07-05 15:08:11 +08:00
    我没搞明白,为啥每次 wt 加载配置文件需要 2-3 秒左右的时间...明明只加载了 oh-my-posh
    mxalbert1996
        12
    mxalbert1996  
       2021-07-05 15:11:45 +08:00 via Android   ❤️ 3
    @hafuhafu 先分清楚 terminal 和 shell
    Leviathann
        13
    Leviathann  
       2021-07-05 15:13:37 +08:00
    @byte10 这个我在 wsltty 上比较常见,就是全屏内容完全刷新的话,经常会明显看到内容是从上往下刷新的。
    hafuhafu
        14
    hafuhafu  
       2021-07-05 15:15:08 +08:00
    @mxalbert1996 #12 就是因为 WT 啊...我直接开 Powshell 在 1 秒内。用 WT 开 Powshell 要 2-3 秒。
    12101111
        15
    12101111  
       2021-07-05 15:27:46 +08:00   ❤️ 2
    看来上面有不少人连 shell 和 virtual terminal 都分不清楚
    wt 烂似乎是因为微软用 DirectWrite 绘制文字, 但是 DirectWrite 实际上会考虑大量在终端上用不到的特性, 一些很快的终端(比如 Alacritty)压根就不支持连字这些特性, 但是 DirectWrite 支持.
    说道屎山这件事, Windows NT 确实存在大量的屎山, 但是 wt 和 Windows 11 绝对是铲除屎山的行动, 像 std::String 这种东西过去在 NT 里是不可能出现的.
    MrKrabs
        16
    MrKrabs  
       2021-07-05 15:41:58 +08:00
    cmd 输出不就很慢嘛,还记得输出个 ffmpeg full help 就要半天
    toptyloo
        17
    toptyloo  
       2021-07-05 15:47:16 +08:00   ❤️ 11
    标题党,另外你用 terminal 项目的 issue 要怎么论证 Windows 11 会很烂?
    dfkjgklfdjg
        18
    dfkjgklfdjg  
       2021-07-05 15:49:33 +08:00
    一座大屎山这个真的,你放弃向后兼容,一堆骂你的,你不放弃也是一堆骂你的,唉。
    HankAviator
        19
    HankAviator  
       2021-07-05 15:49:57 +08:00 via Android
    @Helsing 调 windows 的或者自己下一个最新的 adb 放好就行了啊,问题出在哪里
    charlie21
        20
    charlie21  
       2021-07-05 16:02:33 +08:00
    哪方面的性能低

    这方面的性能低所带来的影响是什么

    ( 渲染性能 2 fps 带来的影响是什么,是不是阻止人们在终端里看彩色视频会很卡?还是有什么除了 “在终端里看视频” 之外的别的需求

    有这部分需求的人有多少 占多少百分比,是不是一个可以抛弃的用户类

    满足了这类特殊需求个体有什么好处,特殊需求个体乐意支付多少钱)
    bthulu
        21
    bthulu  
       2021-07-05 16:11:50 +08:00
    @charlie21 影响我在终端里打字, 我打字快的时候, 1 秒钟能打好几个, 2fps 就是我打的快的时候, 看到的文字就是闪现式的
    xgfan
        22
    xgfan  
       2021-07-05 16:14:51 +08:00
    @charlie21 cat/tail -f 大文件的时候,Windows terminal 就不够流畅。
    Windows terminal 的水平在 linux/Mac 下看,压根不及格 🤷‍♂️
    Trim21
        23
    Trim21  
       2021-07-05 16:15:19 +08:00 via Android
    @12101111 看了看作者的视频,他写的 refterm 也是用的 direct write 。
    Helsing
        24
    Helsing  
       2021-07-05 16:16:27 +08:00 via iPhone
    @HankAviator #19
    wsl2 的 IP 会变,以前 wsl 那种调用 adb 的方式不行了。
    网上找的修改 adb 端口的脚本也不生效。
    这个问题的 issue 还在 GitHub 上挂着呢
    matrix67
        25
    matrix67  
       2021-07-05 16:22:12 +08:00
    @sneezry 对的,如同之前 GTA5 线上模式加载缓慢是因为 R 星渣优化 https://v2ex.com/t/757088

    How I cut GTA Online loading times by 70%: https://news.ycombinator.com/item?id=26296339
    这个真是经典。
    HankAviator
        26
    HankAviator  
       2021-07-05 16:24:44 +08:00
    @Helsing IP 变是 wsl2 的已知问题,没办法(狗头)不过 IP 变化的问题是在哪?
    rioshikelong121
        27
    rioshikelong121  
       2021-07-05 16:39:54 +08:00
    wsl2 的 memory leak 问题解决了么。
    zlbruce
        28
    zlbruce  
       2021-07-05 17:07:17 +08:00
    看了视频,差距确实很大,而且不仅仅是颜色的输出,而就是普通文本的输出。

    refterm 也没有做过 profile,所以应该是性能的最低标准,从这来看 WT 实在是不够看。

    另外,终端的输出性能,是能够影响程序输出到标准输出的效率的,难道不是一个终端的重要指标吗?
    name1991
        29
    name1991  
       2021-07-05 17:09:39 +08:00
    在用 window terminal,但是没感觉到明显的性能问题,是我的使用方式不一样?
    zhea55
        30
    zhea55  
       2021-07-05 17:51:06 +08:00
    我在用新版 windows terminal,界面美观。目前发现的唯一问题是,有时候光标莫名其妙的消失了。
    learningman
        31
    learningman  
       2021-07-05 17:53:19 +08:00
    VSCode 里还有一套长得跟 jQuery 差不多的 API 咧。。。
    ikas
        32
    ikas  
       2021-07-05 17:56:21 +08:00
    You were overly confident in your opinion, but I hope this website helps you understand that it's actually really damn hard.
    ---
    上来就搞个大新闻标题?送给你上面一样的话
    zk8802
        33
    zk8802  
       2021-07-05 18:32:40 +08:00 via iPhone   ❤️ 5
    如果修复这个问题真的这么简单,那就请和 Casey Muratori 相同看法的人花点儿时间读一下相关代码,然后交个 PR 嘛。

    工程上很多东西是没办法追求完美的,特别是在大公司里,归根结底是因为通向完美的路很遥远,而每个人和每个团队的精力都是极其有限的。极少有人愿意为了把一个功能做完美而加班。像 conhost 这种已经在维护模式,还被很多其它项目依赖的项目,要做大修改一定是需要走正式的立项流程的。在写代码之外也有不少精力是不得不花的,因此工程师必须做权衡才可以。

    最后,很多嘲笑 Windows 是屎山的人没有错,但是他们往往忽略了微软在维护传统程序兼容性方面下的功夫。要解决屎山且不考虑兼容传统程序,难度比解决屎山且维持兼容性大非常多。从这个角度出发,Windows 对屎山的控制与解决做得比 Adobe 、Intel 以及绝大部分设备驱动好得多。
    cest
        34
    cest  
       2021-07-05 18:53:23 +08:00   ❤️ 1
    @zk8802 #33 这里都是码农
    当然是要 windows 学 macos 没事就要你重写 app,不然怎麽吃饭
    win32 软件十几年不改还能用,不改订阅制都饿死了
    zk8802
        35
    zk8802  
       2021-07-05 18:58:18 +08:00 via iPhone   ❤️ 4
    另外针对那个 GitHub issue 和 HackerNews 上的某些评论说几句:Be nice. 纯技术讨论不代表就要 present yourself as a dick. 归根结底读评论、写代码的都是人,没人喜欢不友善的评论。不友善的评论往往会让讨论偏离原本的方向,从技术评论变成了对自尊心的维护。
    volks
        36
    volks  
       2021-07-05 19:16:26 +08:00
    「 because we've made it hard, not because of some intrinsic quality of the universe. 」是“他还只是个孩子,没看到他的努力吗”这个意思吗?
    akira
        37
    akira  
       2021-07-05 20:06:07 +08:00
    wt...真的有谁在用么。。
    Dragonphy
        38
    Dragonphy  
       2021-07-05 20:12:29 +08:00
    @akira
    (#`-_ゝ-)请推荐一个 windows 平台下的终端
    LokiSharp
        39
    LokiSharp  
       2021-07-05 23:30:04 +08:00 via iPhone
    真有人用这玩意?
    mmdsun
        40
    mmdsun  
       2021-07-05 23:39:16 +08:00 via Android
    说 Win 代码乱的 大杂烩 屎山的。完全是无稽之谈。搞得像看过 win11 源码一样。

    Windows 早就 UI 和内核分离的。一个 experience pack 包直接升级 UI,还能把 Win10 界面变成 Xbox UI
    smallthing
        41
    smallthing  
       2021-07-06 00:03:19 +08:00
    虽然慢,但是也不至于 fps 只有 2 啊???
    Glyphs: 3k Bytes: 131kb Frame: 1234 Prep: 0ms Write: 6ms Read: 0ms Total: 6ms
    [F1]:write per frame [F2]:color per char TermMarkV1: 286kcg/s (11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz Win32 VTS)
    smallthing
        42
    smallthing  
       2021-07-06 00:06:15 +08:00
    @LokiSharp why not ?
    foMM
        43
    foMM  
       2021-07-06 00:16:29 +08:00 via Android
    wsl2 搭配 wt 加 docker 比我的 2020 款 13 寸 macpro 运行 docker 快,我觉得挺好的。
    mason961125
        44
    mason961125  
       2021-07-06 01:03:37 +08:00
    哈哈哈哈哈哈哈哈哈哈哈楼上吹 Mac 的 virtual termial 的真的用过 iTerm2 和 Windows Terminal 吗? iTerm2 卡成那个比样还好意思吹哈哈哈哈哈哈哈哈哈哈哈
    IgniteWhite
        45
    IgniteWhite  
       2021-07-06 01:42:34 +08:00
    @mason961125 离谱,iTerm2 是真的慢,但是 kitty 和 Alacritty 在 macOS 上又非常快。这个怎么讲,是 iTerm2 慢还是 macOS 里的 terminal emulators 慢?
    wangxn
        46
    wangxn  
       2021-07-06 02:05:19 +08:00
    @Dragonphy putty
    SIGEV13
        47
    SIGEV13  
       2021-07-06 05:20:49 +08:00
    windows terminal 现在的帧数已经远远超过我显示器的刷新率,为啥要关心性能问题??
    way2explore2
        48
    way2explore2  
       2021-07-06 05:26:15 +08:00 via Android
    @ncepuzs 整个 windows os 都是

    Haha

    早晚换 linux kernel
    handuo
        49
    handuo  
       2021-07-06 08:34:05 +08:00 via Android
    @hafuhafu 那确实慢,我一般花 8-9 百毫秒
    justrand
        50
    justrand  
       2021-07-06 09:07:54 +08:00
    @akira
    @LokiSharp
    你们回答的有种莫名其妙的优越感,那么请教一下,为什么不能用?
    我个人一开始用 SecureCRT,到 xshell,最后还是到开源的 WT,日常使用完全没有问题。
    wms
        51
    wms  
       2021-07-06 09:10:21 +08:00
    @zhea55 复制粘贴一坨屎, 右键一坨屎, 选中一坨屎,新开标签页,目录都是默认的,而不是上一个 shell 的, 跟 Linux 下的终端比起来,差距还很大
    LokiSharp
        52
    LokiSharp  
       2021-07-06 09:12:43 +08:00
    @justrand 等他夹带的私货删掉再说吧,比如标签默认的 1 2 3 4
    cxshun
        53
    cxshun  
       2021-07-06 09:33:44 +08:00
    看了一下视频,确实差别有点大。
    但话又说回来,屎山代码这是肯定的,毕竟微软的包袱那么大,10 年前的应用放到 windows 10 或 windows 11 上面照样跑,放到 osx 上,未必就可以。举个例子 proxifier,升级到 big sur 就搞得之前的用不了了。

    要是 windows 能像 osx 一样,不用考虑那么多的兼容性,直接抛弃之前的,那我觉得挺好的,只是到时又有一堆人骂的了。

    PS:我是 osx 和 windows 双修党,最近打算抛弃 mac 。
    Cloutain
        54
    Cloutain  
       2021-07-06 09:35:54 +08:00   ❤️ 1
    Windows11 中依然存在许多老代码老库,但是 Windows 强大的兼容性得以保证他在市场的地位。NT 内核的代码还是相当高水平的,学习操作系统主要看的是 NT 的代码,给了我不少启发。
    lxrmido
        55
    lxrmido  
       2021-07-06 09:37:24 +08:00
    最近我很后悔

    mac 自动更新了 bug sur,pc 自动更新了 win11

    我的生活从此充满了惊喜
    keepeye
        56
    keepeye  
       2021-07-06 09:40:10 +08:00
    性能就算了,我一直期待的可以在命令执行过程中右键清屏或者快捷键清屏的功能一直没有,相关 issue 已经挂在那里几年了
    cxe2v
        57
    cxe2v  
       2021-07-06 09:42:14 +08:00   ❤️ 1
    感觉 V2 上互联网的码农比较多,接触代码的层面都在应用层吧,但凡多接触点深层次的,也不会认为 windows 是屎山,OS X 那种抛弃包袱的才是真正的屎山,这也是为什么工业商业上 windows 占比比 OS X 大得多的原因
    pcmgr456
        58
    pcmgr456  
       2021-07-06 09:42:58 +08:00 via Android
    别问,问就兼容性好
    dreamramon
        59
    dreamramon  
       2021-07-06 10:59:59 +08:00
    @IgniteWhite 自从看到了这个之后,我已经从 iterm2 迁移到 kitty 1 年了,kitty 非常快。
    YIsion
        60
    YIsion  
       2021-07-06 11:00:22 +08:00
    我曾经用 windows termianl 的定时关机命令把我的系统干掉了
    MaverickLee
        61
    MaverickLee  
       2021-07-06 11:23:06 +08:00
    @lxrmido #55 没有加入 Windows Insider 都能自动推送并升级???
    myCupOfTea
        62
    myCupOfTea  
       2021-07-06 11:34:08 +08:00
    window terminal 开源的吧,完全可以提 pr 啊
    haiyang1992
        63
    haiyang1992  
       2021-07-06 11:37:58 +08:00 via Android
    我就想问有没有人遇到过 WT 经常打字几秒没响应的情况,基本都在 WSL2 环境里
    u011631336
        64
    u011631336  
       2021-07-06 11:43:21 +08:00
    为啥我觉得挺好用的
    learningman
        65
    learningman  
       2021-07-06 12:01:26 +08:00
    @lxrmido #54 Win 11 又没推送,除非说你是在 Dev Channel
    但是如果你在 Dev Channel,那生活不本来就是充满惊喜。。。
    bxb100
        66
    bxb100  
       2021-07-06 12:07:06 +08:00
    总结就是提出问题很简单, 解决很难, 这波我谁都不站
    subpo
        67
    subpo  
       2021-07-06 12:28:34 +08:00
    不然用啥呢,颜值就是正义
    libook
        68
    libook  
       2021-07-06 12:33:09 +08:00   ❤️ 1
    对于微软的产品风格已经习惯,现在肯拥抱开发者和开源社区已经是不小的进步了,慢慢来呗。

    我在 Windows 下是用 Cygwin 装 XServer,然后在 WSL2 下开 Terminator,做了个脚本可以在 Windows 下一键打开,使用体验几乎和在 Windows 下开程序差不多,支持窗口停靠操作。

    要说终端模拟器还是 Linux 下的成熟,毕竟打磨了那么多年。
    我是觉得关于 WT,与其说是一个产品,不如说是一个营销(不是贬义),毕竟 Windows 自带的 CMD 和 PowerShell 一直都被各种嫌弃,现在出了个 WT 相当于是给广大开发者表决心,就是愿意做出改变。

    最后很多人都指出来了,WT 是个 MIT 许可证的开源项目,MIT 给了使用者自由,但也同时进行了免责,很多 MIT 项目都会跟使用者说:“我们没有任何义务来满足任何人的需求。”所以如果现有维护人员没有修改的意愿,提出问题的人也可以尝试自己做解决方案然后提 PR,如果 PR 也不被接受的话也完全可以保留授权信息做分支项目,像某著名赛博出国项目就是这样,一波三折分出来几代独立项目,按照各自的意愿分别维护,这也是开源带来的好处之一。
    DeWjjj
        69
    DeWjjj  
       2021-07-06 12:35:42 +08:00
    你可以选择 powershell,比 terminal 强很多。
    我是因为 touch 不了,不想写 echo>而选择了 ni 。
    wms
        70
    wms  
       2021-07-06 13:56:00 +08:00   ❤️ 1
    @libook 微软商城里面有个 X410 不错,可以省掉 cygwin
    binbinyouliiii
        71
    binbinyouliiii  
       2021-07-06 13:58:10 +08:00
    @wms #70 下一版本自带 xserver
    wms
        72
    wms  
       2021-07-06 14:01:30 +08:00
    @binbinyouliiii 那里的消息,这么爽,那岂不是更不需要 WT 了
    lxrmido
        74
    lxrmido  
       2021-07-06 14:10:21 +08:00
    @MaverickLee
    @learningman
    三年前加入了 insider preview 计划,两年前点了退出,至今未能退出……
    确实经常见识到各种惊喜 bug……
    generic
        75
    generic  
       2021-07-06 14:17:54 +08:00 via Android
    @keepeye 系统自带不会做这些花哨功能的。gnome, kde 自带的终端也没有。趁早转第三方软件吧。
    keepeye
        76
    keepeye  
       2021-07-06 14:29:04 +08:00
    @generic 这不算什么花哨功能吧?很实用的一个功能,其他终端软件对 wsl 兼容又不太好
    IgniteWhite
        77
    IgniteWhite  
       2021-07-06 20:46:01 +08:00 via iPhone
    @generic KDE 自带 Konsole 就能快捷键清屏啊,Gnome Terminal 也可以。不要云

    @keepeye 的确是基础功能。说图形渲染花哨还差不多
    hronro
        78
    hronro  
       2021-07-06 22:46:57 +08:00
    现在最快的 terminal 应该是 Alacritty ?
    有没有人拿 Alacritty 和 WT 做下 benchmark 来对比?
    timpaik
        79
    timpaik  
       2021-07-29 11:46:33 +08:00 via Android
    @hronro alacritty 的 github 有 benchmark 链接
    zeni123
        80
    zeni123  
       2021-09-10 21:02:09 +08:00
    feel free to raise a pull request 。 开源项目有 idea 就自己开 PR
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1376 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 17:40 · PVG 01:40 · LAX 10:40 · JFK 13:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.