downstairs
V2EX  ›  问与答

go 适合写操作系统吗?

  •  
  •   downstairs · Jan 26, 2021 · 5545 views
    This topic created in 1952 days ago, the information mentioned may be changed or developed.

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

    22 replies    2021-01-26 15:01:51 +08:00
    PiersSoCool
        1
    PiersSoCool  
       Jan 26, 2021
    还是要性能
    写汇编最好
    但是出于性能和书写的平衡 还是 C 吧
    yyfearth
        2
    yyfearth  
       Jan 26, 2021
    不太适合 因为有 GC
    你可以试试 Rust 比 C/C++强 但是也比 Go 难
    renmu123
        3
    renmu123  
       Jan 26, 2021 via Android
    不适合,现在开始转向 rust 了
    yyfearth
        4
    yyfearth  
       Jan 26, 2021
    Rust 我说的是可读性和内存安全性而言
    不是效率
    misaka19000
        5
    misaka19000  
       Jan 26, 2021
    不适合,因为 go 的 runtime 太多了
    misaka19000
        6
    misaka19000  
       Jan 26, 2021
    也就是说 golang 语言本身附带的运行时特性太多了
    hwdef
        7
    hwdef  
       Jan 26, 2021
    有 gc 的语言都不适合写操作系统。
    sampeng
        8
    sampeng  
       Jan 26, 2021 via iPhone
    一个 gc 0.1ms 操作系统都会受不了
    Kilerd
        9
    Kilerd  
       Jan 26, 2021
    go 不能做实时系统。
    46fo
        10
    46fo  
       Jan 26, 2021
    go 有 GC 就不适合实时要求高的操作
    cmostuor
        11
    cmostuor  
       Jan 26, 2021
    go 语言一开始的定位就不是写操作系统的语言
    cmostuor
        12
    cmostuor  
       Jan 26, 2021
    @Kilerd github 上还真有嵌入式的版本 但也是拿来写应用而已
    ManjusakaL
        13
    ManjusakaL  
       Jan 26, 2021 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  
       Jan 26, 2021
    有 gc 不合适的原因是在 gc 的时候,os 无法响应任何指令?但是现在消费级 os 都不是严格实时的吧
    ashong
        15
    ashong  
       Jan 26, 2021 via iPhone
    不知道是不是和 rust 有关,windows 10 长时间运行 firefox 和 thunderbird 就会变得非常慢,关掉重新打开就好了
    lysS
        16
    lysS  
       Jan 26, 2021
    为什么不设计成 GC 可选择的喃?
    t6attack
        17
    t6attack  
       Jan 26, 2021
    举个例子:大多数电脑在闲置状态下,底层其实在频繁收发数据包。但 CPU 占用却趋近与 0%,因为 tcp/ip 、arp 、802.11 。。这些底层通信协议是用 C 语言定义和实现的,网卡驱动是用汇编写的。效率很高,性能浪费极少。所以底层的东西感觉不到资源占用,资源占用主要来自系统之上的应用。
    如果把这些用高级语言实现,底层日常收发数据包,CPU 占用就应用直接飙上去。这系统能用嘛?
    Jirajine
        18
    Jirajine  
       Jan 26, 2021 via Android
    go 且不说 gc 导致的效率问题。
    安全性和可靠性也不行,从 c 那里继承太多糟粕。
    BingoXuan
        19
    BingoXuan  
       Jan 26, 2021 via Android   ❤️ 1
    @t6attack
    那是因为内核可以捕获硬件中断,中断到了就会切换对应的系统组件的处理函数处理,而一般程序还要等内核处理好中断及其数据交回数据给应用程序,自然很慢,而且中断多了也一样 CPU 占用一样高。网卡驱动都有 dma 的,而应用程序还要自己叫 CPU 搬当然更慢。
    chenyi
        20
    chenyi  
       Jan 26, 2021
    mxT52CRuqR6o5
        21
    mxT52CRuqR6o5  
       Jan 26, 2021
    github 上有 go 写系统的项目,但 go 确实不适合这种事,有 gc 又有 runtime
    libook
        22
    libook  
       Jan 26, 2021
    Go 有 GC,不知道内存调度方面会不会有坑。

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

    系统开发推荐 Rust,现在很多大厂的 C/C++项目也开始招 Rust 了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1116 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 18:21 · PVG 02:21 · LAX 11:21 · JFK 14:21
    ♥ Do have faith in what you're doing.