首页 > 其他分享 >协程

协程

时间:2023-05-26 23:00:29浏览次数:43  
标签:协程 ucp int context ucontext stack uc

uContext(#include<ucontext.h>)

  • 数据结构
typedef struct ucontext_t
{
    unsigned long __ctx(uc_flags);  
    struct ucontext_t *uc_link;     // uc_link指向当前context 结束时待恢复的上下文
    stack_t uc_stack;               // context 使用的栈 初始化栈顶指针(context.uc_stack.ss_sp = stack;) 栈大小(context.uc_stack.ss_size = sizeof(stack);)
    sigset_t uc_sigmask;
    mcontext_t uc_mcontext; 
} ucontext_t;
  • int getcontext (ucontext_t *ucp); 获取当前协程的context 并保存到 ucp 指向的内存
  • int setcontext (const ucontext_t *ucp); 设置ucp指向的context为运行上下文并开始执行。
  • void makecontext (ucontext_t ucp, void (func) (void), int argc, ...);修改ucp指向的任务。
  • int swapcontext (ucontext_t restrict oucp, const ucontext_t restrict ucp); swapcontext()实现将当前的context保存到oucp中,并切换到ucp指向context继续执行。

标签:协程,ucp,int,context,ucontext,stack,uc
From: https://www.cnblogs.com/qirmcmww/p/17436026.html

相关文章

  • 【客户端学习】Kotlin 协程的基本概念及用法
    协程是什么?协程是一种编程思想,并不局限于特定的语言。除Kotlin以外,其他的一些语言,如Go、Python等都可以在语言层面上实现协程。KotlinCoroutine本质上是Kotlin官方提供的一套线程封装API,其设计初衷是为了解决并发问题,让「协作式多任务」实现起来更方便。协程与线程的......
  • 协程并发下数据汇总:除了互斥锁,还有其他方式吗?
    1.简介本文介绍了在并发编程中数据汇总的问题,并探讨了在并发环境下使用互斥锁和通道两种方式来保证数据安全性的方法。首先,通过一个实例,描述了一个并发拉取数据并汇总的案例,并使用互斥锁来确保线程安全。然后,讨论了互斥锁的一些缺点,引出了通道作为一种替代方案,并介绍了通道的基......
  • python高级技术(死锁、递归锁、信号量、Event时间、进程池、线程池、协程)
    一死锁和递归锁(了解)进程也有死锁与递归锁,使用方法类似所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。当你知......
  • Ep_操作系统面试题-什么是协程
     协程是一种比线程更加轻量级的存在,一个线程可以拥有多个协程。是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行),**不会像线程切换那样消耗资源。**面试宝典 很多人不......
  • 如何优雅得关闭协程呢
    1.简介本文将介绍首先为什么需要主动关闭goroutine,并介绍如何在Go语言中关闭goroutine的常见套路,包括传递终止信号和协程内部捕捉终止信号。之后,文章列举了需要主动关闭协程运行的常见场景,如启动一个协程执行一个不断重复的任务。希望通过本文的介绍,读者能够掌握如何在适当的时......
  • 协程,gevent模块
    多进程,每启动一个程序单开一块空间,单分配一些资源多线程,在一个进程里面开多个线程,让多个线程同时工作,操作系统控制线程对IO操作阻塞感知能力强多协程,在一个线程,跑多个任务,程序控制协程程序是别人写好的模块,所以感知IO操作阻塞能力差gevent可以实现,当函数遇到IO操作(阻......
  • Python协程asyncio
    在Python使用multiprocessing进行多线程和多进程操作 这篇文章中介绍了使用多线程的方式对一些I/O操作(文件读写、网络请求,这些操作不用等待其结束,在此期间可以做其他事情)进行加速。而本篇文章介绍的协程可以理解成“微线程”,不开辟其他线程,只在一个线程中执行,并且执行函数时......
  • 协程
    引言在使用socket编程时,我们会用到accept、connect、recv、send等函数,这些函数在没有数据到达时,会阻塞等待IO数据的到达。这不利于我们处理多个连接并快速响应。一种方案是,服务端每accept一个连接,就创建一个新的线程用来处理这个连接。这会导致线程过多,而且线程之前切换开销很......
  • 协程
    引子之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建进程、创建线程、以及管理他们......
  • 1 接口 、2 并发与协程 、3 信道,缓冲信道 、4 mutex 、5 异常处理
    目录1接口2并发与协程3信道,缓冲信道4mutex5异常处理1接口#1实现多个接口#2接口嵌套#3接口零值packagemainimport"fmt"//接口//1实现多个接口具体类型可以赋值给多种接口类型//typeAnimalinterface{// run()//}////typeDoginterface{......