管程

每天辣么多的技术干货和前沿技术需要关注,但是在我们这个需要积累和沉淀的技术领域,好多的专业词汇,或许您早已跟它混了个脸熟,然而这个词汇背后的东西您或许还不知道。

今天就来说说这几个程:进程、线程、管程、协程和纤程。

线程

线程(Threads),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元,出现于19世纪80年代。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

线程是程序中一个单一的顺序控制流程。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

进程

进程(Process),是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是19世纪60年代初首先由麻省理工学院的MULTICS系统和IBM公司的CTSS/360系统引入的。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

如果觉得没那么形象,点这里一下就看明白了,关于进程和线程的区别。

管程

管程 (Monitors,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源,这些共享资源一般是硬件设备或一群变数。

管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。与那些通过修改数据结构实现互斥访问的并发程序设计相比,管程实现很大程度上简化了程序设计

系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。

利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程。

Hansan为管程所下的定义:“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”。

协程

协程(coroutine)也是一种程序组件。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程源自 Simula 和 Modula-2 语言,但也有其他语言支持。协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务、迭代器、无限列表和管道。 协程最初在1963年被提出。

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,我们来比较协程和线程。多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

纤程

纤程(fiber)包含独立的目态栈,寄存器状态的控制信息。目态控制的纤程转接要求较高的编程经验,由于纤程属于目态对象,一个纤程被封锁意味着所在线程被封锁,应用程序可以通过ConvertThreadToFiber将线程转换为纤程。与线程对比,纤程具有切换速度快的特点?

在Windows2000/XP中,纤程相当于用户级别的线程或轻进程,由Win32库函数支持,对核心是不可见的,纤程可以通过SwitchToFiber切换至另一合作纤程,以实现合作纤程之间的协同。

线程是在Windows内核中实现的,纤程是在用户模式下实现的,内核对纤程一无所知,内核会根据我们定义的算法来对纤程进行调度。一个线程可以包含一个或多个纤程。

文章来源:嵌入式资讯精选

围观 561
订阅 RSS - 管程