访问其他协程

简介: 访问其他协程

调试库中的所有自省函数都能够接受一个可选的协程作为第一个参数,这样就可以从外部来检查这个协程。例如,考虑如下示例:

co = coroutine.create(function ()
  local x = 10
  coroutine.yield()
  error("some error")
end)
coroutine.resume(co)
print(debug.traceback(co))


对函数 taceback 的调用作用在协程 co 上,结果如下:

stack traceback:
        [C]: in function 'coroutine.yield'
        main.lua:3: in function <main.lua:1>


由于协程和主程序运行在不同的栈上,所以回溯没有跟踪到对应函数 resume 的调用。

当协程引发错误时并不会进行栈展开,这就意味着可以在错误发生后检查错误。继续上面的示例,如果再次唤醒协程,它会提示引起了一个错误:

print(coroutine.resume(co))   --> false     temp:4: some error


现在,如果输出栈回调,会得到这样的结果:

stack traceback:
        [C]: in function 'error'
        temp:4: in function <temp:1>


即使在错误发生后,也可以检查协程中的局部变量:

print(debug.getlocal(co, 1, 1))     --> x   10
目录
相关文章
|
9天前
|
前端开发 编译器 Linux
浅谈C++20 协程那点事儿
本文是 C++20 的协程入门文章,作者围绕协程的概念到协程的实现思路全方位进行讲解,努力让本文成为全网最好理解的「C++20 协程」原理解析文章。
|
2月前
|
前端开发 程序员 调度
探索协程在 C++ 中的实现方式
探索协程在 C++ 中的实现方式
105 2
|
3月前
|
调度
解释一下为什么协程比线程更轻量级。
解释一下为什么协程比线程更轻量级。
75 1
|
4月前
|
Unix Linux 编译器
进程、线程、协程的区别
进程、线程、协程的区别
30 0
|
5月前
|
程序员 调度 C#
协程是什么?为何说协程具有同步的编程方式又具有异步的性能?
协程是什么?为何说协程具有同步的编程方式又具有异步的性能?
77 0
|
11月前
|
数据采集 调度 开发者
协程这么好,那它能完全代替线程吗?
协程这么好,那它能完全代替线程吗?
119 0
协程这么好,那它能完全代替线程吗?
|
安全 调度 开发者
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
协程与线程向来焦孟不离,但事实上是,线程更被我们所熟知,在Python编程领域,单核同时间内只能有一个线程运行,这并不是什么缺陷,这实际上是符合客观逻辑的,单核处理器本来就没法同时处理两件事情,要同时进行多件事情本来就需要正在运行的让出处理器,然后才能去处理另一件事情,左手画方右手画圆在现实中本来就不成立,只不过这个让出的过程是线程调度器主动抢占的。
并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3
|
网络协议 程序员 调度
使用协程实现多线程
使用协程实现多线程
198 0
|
Python
协程基础
协程基础
142 0
|
安全 程序员 调度
Goroutine 是什么?进程、线程、协程又是什么?有什么区别和联系?
进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。
131 0
Goroutine 是什么?进程、线程、协程又是什么?有什么区别和联系?