深入理解Erlang R17.3的dirty_scheduler机制
需积分: 9 3 浏览量
更新于2024-12-28
收藏 181KB ZIP 举报
资源摘要信息:"Erlang脏调度程序示例和相关知识点"
1. Erlang和OTP概述
Erlang是一种并发、分布式的编程语言,最初由爱立信设计用于构建大规模、高容错性的实时系统。OTP(开放电信平台)是一套用于Erlang的中间件、工具和库的集合,它为开发者提供了一系列构建可扩展、可靠、健壮系统的构件和设计模式。Erlang和OTP被广泛应用于电信、银行、电子商务和其他需要高可用性的行业。
2. Erlang中的调度程序
调度程序在Erlang虚拟机(BEAM)中起着至关重要的作用。它们负责分配CPU时间给不同运行的Erlang进程。Erlang的调度模型是基于轻量级进程(线程)的,每个进程都有自己的执行栈,因此与操作系统线程相比,上下文切换开销非常小。
3. 脏调度程序概念
“脏调度程序”是一个相对于传统“干净调度程序”的概念。干净调度程序主要用于处理Erlang语言层面的任务,而脏调度程序则被用来处理那些可能包含非Erlang代码的NIF(Native Implemented Function)函数。当NIF函数执行时,它可能会造成较高的延迟,因此这些操作更适合在专门的线程中执行,以避免阻塞干净调度器,影响其他Erlang进程。
4. 构建Erlang时启用脏调度程序
从Erlang R17.3版本开始,Erlang社区引入了脏调度程序。要使用脏调度程序,开发者在编译和构建Erlang时需要加上特定的编译标志`--enable-dirty-schedulers`。这个操作会使得Erlang虚拟机启动时包括一定数量的脏调度器。
5. 检查脏调度程序状态
一旦Erlang系统启动,我们可以通过`erlang:system_info(dirty_cpu_schedulers_online)`函数检查脏调度程序是否已正确启用。如果系统中脏调度程序没有被启用,这个函数会返回`badarg`错误。
6. 检测调用是否在脏调度程序上
开发者可以通过调用`enif_is_on_dirty_scheduler(hp)`函数来检测当前的NIF调用是否在脏调度程序上运行。这里,`hp`是ErlNifEnv类型的指针,代表NIF环境。如果该函数返回`true`,则表示当前调用运行在脏调度程序上。
7. Erlang 17.03版本中的变动
从Erlang版本17.03开始,一些与脏调度程序相关的函数,如`enif_schedule_dirty_nif`、`enif_schedule_dirty_nif_finalizer`和`enif_dirty_nif_finalizer`,已被从`erl_nif.h`头文件中移除。这一变动表明从这个版本起,脏调度程序的管理方式有所变化,开发者需要根据最新的官方文档来进行相应的调整和实现。
8. NIF函数与脏调度程序的关系
NIF函数允许开发者用C语言编写Erlang模块中的函数。这些函数在Erlang进程中直接调用,因此可以运行得非常快。然而,由于NIF函数在执行时可能会使用到阻塞操作或进行大量的计算,它们可能会导致Erlang调度器的延迟。因此,将NIF函数的执行调度给脏调度器,可以最小化这种延迟对其他Erlang进程的影响。
9. 关于标签"C"
标签"C"表明与这个话题相关的技术细节或讨论涉及到了C语言的编程。因为NIF函数通常用C语言实现,所以这个标签指出这些实现细节很可能是用C语言来编写的,需要开发者具备C语言的编程能力。
10. 压缩包文件命名规则
在给定的文件信息中,提到的压缩包文件名是`dirty_scheduler-master`。这表明压缩包可能包含了与“脏调度程序”相关的项目、代码库或示例文件,而“master”通常指的是这个版本代表主分支或当前最稳定的版本。
通过以上知识点,我们可以看到,脏调度程序是Erlang中一个高级特性,专门用于优化NIF函数的执行效率和隔离高延迟任务,以保证Erlang系统的整体性能。开发者在使用这个特性时需要遵循特定的编译指导,并使用Erlang提供的API进行相关操作。
2021-05-03 上传
2021-04-20 上传
2021-03-27 上传
139 浏览量
2021-02-15 上传
2021-05-04 上传
163 浏览量
555 浏览量
点击了解资源详情
梦想是世界和平
- 粉丝: 22
- 资源: 4624
最新资源
- 09年最新计算机统考大纲
- ethereal用法
- Java-jdbc 数据库连接详细教程
- 利用VLAN技术组建三层线速校园网
- 火箭发动机包覆层测厚的超声信号处理研究
- 面试的经典C++,大概有几百例题,很多公司都考那个作为入职的笔试题的
- 基于小波变换模极大值的橡胶薄层厚度超声检测
- 翻译轻松练英语四级常考翻译
- intouch 9.5 中文版 操作手册
- 堆与栈的区别堆与栈的区别
- 书籍DSP入门手册,实用的教程!
- 数字DS18B20温度传感器中文资料
- ERwin方法论(西南石油学院计算机科学系)
- windows驱动开发指南
- high-speed signal integrity design
- Signal-Integrity-Issues-for-High-Speed-Serial-Differential-Interconnects-DrShiue-NTU.pdf