在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。多任务机制大致可划分为两种:
这两种度偶任务各有优缺,抢占式多任务固有的同步问题使得程序经常出现不可预知的行为,协作式多任务则要求任务具备相当的自律精神。 协程(Coroutine)技术是一种程序控制机制,早在上世纪60年代已被提出,用它可以很方便地实现协作式多任务。在主流的编程语言如C++、Java、Pascal...中,很少能看见协程的身影。但在不少动态脚本语言如Python、Perl...中却都提供了协程或与之相似的机制,其中最为突出便是Lua。 协程(Coroutine)是指协作的例程,是多任务机制。最早由Melvin Conway于1963年提出并实现。跟主流程序语言中的线程不一样,线程是属于侵入式的组件,线程实现的系统称为抢占式多任务系统,而协程实现的多任务系统称为协作式多任务系统。 协程(Coroutine)拥有4种状态:正常(normal)、挂起(suspended)、运行(running)、停止(dead)
由于线程缺乏 Lua语言实现的协程(Coroutine)是一种非对称式(asymmetric)协程,或称之为半对称式(semi-symmetric)协程,又或叫半协程(semi-coroutine)。这种协程机制之所以称为非对称,是因为它提供了两种传递程序控制权的操作。
一个半对称协程可以看作是从属于它的调用者的,二者的关系非常类似于例程(routine)与其调用者之间的关系。 既然有非对称式协程,当然也就有对称式协程(symmetric)。对称式协程的特点是只有一种传递程序控制权的操作,即将控制权直接传递给指定的协程。 Lua中的协程(Coroutine,协同程序,协同式多线程)和多线程(Thread)和相似,每个协程都有自己的堆栈、局部变量、PC计数器,同时又与其他协程共享全局变量等,并通过 相关概念
协程(Coroutine)具有两个非常重要的特性:
通俗来说,类似一个带有静态数据且具有多个进入点和返回点的函数。 协程函数
|
请发表评论