V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
helloworld12
V2EX  ›  问与答

golang 的模式

  •  
  •   helloworld12 · Oct 26, 2018 · 2299 views
    This topic created in 2751 days ago, the information mentioned may be changed or developed.

    golang 的调度模式

    可以让你,用阻塞同步的方式获得非阻塞异步的性能... 不知道这个理解是否正确

    同步异步阻塞非阻塞

    就是当一个协程碰到各种,IO,syscall 的时候,当前协程进入到 wait 状态,线程切换到别可以运行的协程去运行(不会浪费 CPU 的时间),等 IO,syscall 完成后,在让原来的协程进入到 runable 状态

    9 replies    2018-10-26 09:23:48 +08:00
    Valyrian
        1
    Valyrian  
       Oct 26, 2018
    多线程不都是这样吗,和 golang 有什么关系
    shutongxinq
        2
    shutongxinq  
       Oct 26, 2018
    Golang 确实是这样的,不会 busy waiting,没有 spin lock。
    @Valyrian C++怎么自动这样?
    Valyrian
        3
    Valyrian  
       Oct 26, 2018
    @shutongxinq C++你除非明确写出来 while true 这种东西,就不是 spin lock 啊,等待 io 的时候干什么是内核决定的,现在内核早就不 spin lock 了
    Valyrian
        4
    Valyrian  
       Oct 26, 2018
    @shutongxinq 等待 io 的时候内核可以让 cpu 去跑程序的的其他线程,或者系统里别的进程
    shutongxinq
        5
    shutongxinq  
       Oct 26, 2018
    @Valyrian 你也是学过 15640 的校友,怎么就不明白...他说 golang 搞了一个 block 自动 wait 的机制,提供了另外一种 abstraction。你 C++里面显然要 monitor semaphore 同步啊,不然读一个值没有,难道不是直接报错吗?怎么做到自动 wait ?
    Valyrian
        6
    Valyrian  
       Oct 26, 2018
    @shutongxinq 你说的是 golang 能自动 select ?那确实是自动的。。但是我完全没看出来 op 这句话在说这个

    > 就是当一个协程碰到各种,IO,syscall 的时候,当前协程进入到 wait 状态,线程切换到别可以运行的协程去运行(不会浪费 CPU 的时间),等 IO,syscall 完成后,在让原来的协程进入到 runable 状态
    hjc4869
        7
    hjc4869  
       Oct 26, 2018 via iPhone
    其实这种 feature 在 C/C++下都是一个库就能实现的
    helloworld12
        8
    helloworld12  
    OP
       Oct 26, 2018
    @shutongxinq #5 15640 这个? 15-440/640, Fall 2018: Distributed Systems https://www.synergylabs.org/courses/15-440/
    innoink
        9
    innoink  
       Oct 26, 2018 via Android
    其实就是实现了一个用户态协程调度器而已。其实这种东西早就有了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   921 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 21:43 · PVG 05:43 · LAX 14:43 · JFK 17:43
    ♥ Do have faith in what you're doing.