go 适合写操作系统吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
downstairs
V2EX    问与答

go 适合写操作系统吗?

  •  
  •   downstairs 2021-01-26 0:41:39 +08:00 5146 次点击
    这是一个创建于 1742 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    系统开发推荐 Rust,现在很多大厂的 C/C++项目也开始招 Rust 了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:18 PVG 10:18 LAX 18:18 JFK 21:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86