南宁百度网站公司,wordpress媒体库搜索,为什么要建设营销型网站,国内做网站网站代理协程为什么开销小于线程
协程本质上是线程#xff0c;将调度的代码在用户态重新实现#xff0c;因为子程序切换不是线程切换而是由程序自身控制#xff0c;没有线程切换的开销#xff0c;所以执行效率高。协程通常是纯软件实现的多任务#xff0c;与CPU和操作系统通常没有…协程为什么开销小于线程
协程本质上是线程将调度的代码在用户态重新实现因为子程序切换不是线程切换而是由程序自身控制没有线程切换的开销所以执行效率高。协程通常是纯软件实现的多任务与CPU和操作系统通常没有关系跨平台跨体系结构。协程在执行过程中可以调用别的协程自己则中途退出执行之后又从调用别的协程的地方恢复执行。对于线程而言其上下文存储在内核栈中。线程的上下文切换必须先进入内核态这就造成了开销。线程的结构在内核中就是进程的task_struct只不过少了一些信息因此需要进入内核态开销大。因此协程上下文切换开销少。
协程的缺点
无法利用多核CPU协程的本质是单线程比如一个单线程多个协程它不能将一个多核处理器的多个核同时用上协程需要和进程配合才能用在多核CPU上。进行阻塞操作如IO时会阻塞掉整个程序 协程实现相关概念
函数栈切换 栈帧
栈帧是指为一个函数调用单独分配的那部分栈空间比如一个运行的函数调用另一个函数就要进入一个新的栈帧。原来函数的栈帧称为调用者函数的帧新的栈帧称为被调用函数的帧当前帧。被调用者函数运行结束后当前帧全部回收回到调用者的帧。
函数调用时的esp/ebp
esp栈顶指针ebp栈底指针返回地址指明当B返回的时候要从A程序的哪个位置继续执行 有栈协程
独立栈
缺点独立栈往往会更加的浪费内存。因为我们需要为每一个协程预先分配一个栈空间但是问题是协程不一定会用完这个栈空间而那些多出来的栈空间就是被浪费掉了的。而且空间太小也会有爆栈的隐患。优点每次切换协程的时候不需要对栈进行拷贝。相比于共享栈 共享栈
优点节省内存。当协程挂起的时候依据当前协程使用的栈空间大小来分配内存备份协程的栈内容。缺点每次换入换出都有数据拷贝的过程