美文网首页
Go协程的优势

Go协程的优势

作者: 思维忒 | 来源:发表于2023-05-08 17:05 被阅读0次

    协程相比线程主要有几点优势:

    1. 更轻量。当一个线程被创建时,操作系统会为该线程分配一定的内存空间,其中包括线程栈和线程控制块等信息。线程栈用于存储线程的局部变量、函数调用栈等信息,而线程控制块则用于存储线程的状态、优先级、调度信息等。而协程创建时,默认仅需要分配4KB的空间
    2. 更高并发性。这个也是因为更轻量,所以可以创建更多
    3. 更低开销。这个是因为协程的调度是发生在用户态,不想线程需要在用户态和内核态来回切换
    4. 更易用。这个就不言自明了

    协程其实底层还是依附于线程的,相当于在线程的基础上做了更高一层的抽象。协程创建时默认分配的4KB空间主要会存储以下信息:

    1. 局部变量:用来存储协程的局部变量,这些变量只在协程的生命周期内有效。
    2. 函数调用栈:协用来存储函数调用栈,每当一个函数被调用时,该函数的参数、返回值和局部变量等信息都会被存储在协程的栈中,当函数返回时,这些信息会被弹出栈。
    3. 协程状态:用来存储协程的状态信息,例如协程的调度状态、堆栈指针等信息。

    协程的栈空间是在堆上分配的,也会根据需要动态的分配,从而减少内存占用。

    在Go语言中,协程会绑定在一个线程上,但是协程的调度是由协程库来实现的,而不是由操作系统来实现的。当一个协程被创建时,它会被绑定到当前线程上,如果当前线程中已经有其他协程在执行,那么新创建的协程会被加入到协程队列中等待调度。当一个协程被阻塞时,协程库会自动将该协程从当前线程中移除,并将其加入到其他线程的协程队列中等待调度

    相关文章

      网友评论

          本文标题:Go协程的优势

          本文链接:https://www.haomeiwen.com/subject/nrelsdtx.html