V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
downstairs
V2EX  ›  问与答

go 适合写操作系统吗?

  •  
  •   downstairs · 317 天前 · 3197 次点击
    这是一个创建于 317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我知道基本的 C 和汇编可以写,但晦涩难懂。 用 go 怎么样?

    22 条回复    2021-01-26 15:01:51 +08:00
    PiersSoCool
        1
    PiersSoCool  
       317 天前
    还是要性能
    写汇编最好
    但是出于性能和书写的平衡 还是 C 吧
    yyfearth
        2
    yyfearth  
       317 天前
    不太适合 因为有 GC
    你可以试试 Rust 比 C/C++强 但是也比 Go 难
    renmu123
        3
    renmu123  
       317 天前 via Android
    不适合,现在开始转向 rust 了
    yyfearth
        4
    yyfearth  
       317 天前
    Rust 我说的是可读性和内存安全性而言
    不是效率
    misaka19000
        5
    misaka19000  
       317 天前
    不适合,因为 go 的 runtime 太多了
    misaka19000
        6
    misaka19000  
       317 天前
    也就是说 golang 语言本身附带的运行时特性太多了
    hwdef
        7
    hwdef  
       317 天前
    有 gc 的语言都不适合写操作系统。
    sampeng
        8
    sampeng  
       317 天前 via iPhone
    一个 gc 0.1ms 操作系统都会受不了
    Kilerd
        9
    Kilerd  
       317 天前
    go 不能做实时系统。
    xdeng
        10
    xdeng  
       317 天前
    go 有 GC 就不适合实时要求高的操作
    cmostuor
        11
    cmostuor  
       317 天前
    go 语言一开始的定位就不是写操作系统的语言
    cmostuor
        12
    cmostuor  
       317 天前
    @Kilerd github 上还真有嵌入式的版本 但也是拿来写应用而已
    ManjusakaL
        13
    ManjusakaL  
       317 天前 via iPhone
    OSDI 2018 上有篇文章,The benefits and costs of writing a POSIX kernel in a high-level language

    MIT 那边用 Go 实现了一个 POSIX 内核,具体可以看一下,https://www.usenix.org/system/files/osdi18-cutler.pdf
    UN2758
        14
    UN2758  
       317 天前
    有 gc 不合适的原因是在 gc 的时候,os 无法响应任何指令?但是现在消费级 os 都不是严格实时的吧
    ashong
        15
    ashong  
       317 天前 via iPhone
    不知道是不是和 rust 有关,windows 10 长时间运行 firefox 和 thunderbird 就会变得非常慢,关掉重新打开就好了
    lysS
        16
    lysS  
       317 天前
    为什么不设计成 GC 可选择的喃?
    t6attack
        17
    t6attack  
       317 天前
    举个例子:大多数电脑在闲置状态下,底层其实在频繁收发数据包。但 CPU 占用却趋近与 0%,因为 tcp/ip 、arp 、802.11 。。这些底层通信协议是用 C 语言定义和实现的,网卡驱动是用汇编写的。效率很高,性能浪费极少。所以底层的东西感觉不到资源占用,资源占用主要来自系统之上的应用。
    如果把这些用高级语言实现,底层日常收发数据包,CPU 占用就应用直接飙上去。这系统能用嘛?
    Jirajine
        18
    Jirajine  
       317 天前 via Android
    go 且不说 gc 导致的效率问题。
    安全性和可靠性也不行,从 c 那里继承太多糟粕。
    BingoXuan
        19
    BingoXuan  
       316 天前 via Android   ❤️ 1
    @t6attack
    那是因为内核可以捕获硬件中断,中断到了就会切换对应的系统组件的处理函数处理,而一般程序还要等内核处理好中断及其数据交回数据给应用程序,自然很慢,而且中断多了也一样 CPU 占用一样高。网卡驱动都有 dma 的,而应用程序还要自己叫 CPU 搬当然更慢。
    chenyi
        20
    chenyi  
       316 天前
    mxT52CRuqR6o5
        21
    mxT52CRuqR6o5  
       316 天前
    github 上有 go 写系统的项目,但 go 确实不适合这种事,有 gc 又有 runtime
    libook
        22
    libook  
       316 天前
    Go 有 GC,不知道内存调度方面会不会有坑。

    个人感受是 Go 比较适合写业务,简单且快。

    系统开发推荐 Rust,现在很多大厂的 C/C++项目也开始招 Rust 了。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3055 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:41 · PVG 12:41 · LAX 20:41 · JFK 23:41
    ♥ Do have faith in what you're doing.