downstairs
V2EX  ›  问与答

go 适合写操作系统吗?

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

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

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

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

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