协程的前世今生
a...Z
golang php rust
展开
-
hello word(协程)的大致执行过程
----------helloword执行流程------==hello word 程序被编译成可执行文件加载到内存中对于程序执行空间中的代码段,重要的是程序执行入口,不同平台执行入口不一样在进行一系列的程序代码检查和初始化之后会已runtime.main为程序执行入口创建main goroutinemain goutine 执行以后才会调用我们编写的main.main数据段全局变量 g0。m0协程对应的数据结构是runtime.g,工作线程对应的是runtime.m,全局变量原创 2020-10-21 23:13:18 · 329 阅读 · 0 评论 -
协程在io多路复用中的应用
阻塞式IO在这里插入图片描述socket的所有操作都由操作系统来提供,也就是通过系统调用来完成每创建一个socket,就会在文件描述符表中对应增加一条记录,而返回给应用程序的只有一个socket描述符,每个TCPsocket创建的时候,操作系统都会为它分配读缓冲区和写缓冲区要获得数据就要从读缓冲区读取过来,同样的要通过socket发送数据,就要写入些缓冲区当要写入的数据没有地方,或者读取的数据没有时候,就要有cpu一致在阻塞的等待,这就是阻塞式IO在高并发场景下家具调度开销原创 2020-10-14 22:41:25 · 223 阅读 · 0 评论 -
协程的底层实现原理
协程简介线程是进程的执行体,拥有一个执行入口,以及从进程虚拟地址空间分配的栈信息,包括用户栈和内核栈操作系统会记录线程控制信息线程获得CPU时间片以后才可以执行CPU切换对应线程的栈基、栈指针、指令指针等寄存器如果线程各自创建几个执行体,给他们各自指定执行入口,申请一些内存分配给他们做执行栈,那么线程就可以按需调度这几个执行体了为了实现这几个执行体的切换,线程也需要记录执行体的信息,包括ID、栈的位置、执行入口地址、执行现场等等线程可以选择一个执行体来执行,此时CPU中指令指针就会指向这个执原创 2020-09-17 22:40:33 · 4448 阅读 · 0 评论