`
qiezi
  • 浏览: 498675 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C和Erlang轻量级线程性能

阅读更多
简单比较了一下ucontext和Erlang的进程切换效率,在我的机器上ucontext每秒可以完成90万次切换,Erlang则要快得多,每秒可以完成412万次切换,这个性能比较和之前shootout上的测试相近。

效率差这么多是可以预见的,C的轻量级线程实现都是栈切换的,要完成寄存器保存和加载,只是不需要经过系统调度。相比之下其它语言的轻量级线程切换通常不是C栈切换,开销要小得多。

有这么大的差距是不是Erlang就有很大的性能优势呢?我觉得不是。Erlang为了保证实时性,把进程调度的粒度设置到函数调用这个级别上,复杂的应用中很容易导致过多的切换;而C实现则是由程序员自己找准时机来切换,很大程序上可以弥补这个缺点。另外C在计算性能上高出Erlang数倍,也能够弥补这一缺陷。
4
2
分享到:
评论
2 楼 qiezi 2009-07-22  
mryufeng 写道
luajit 的 coco也是coroutine的c 实现 感觉不错

呵呵,学习一下先
1 楼 mryufeng 2009-07-22  
luajit 的 coco也是coroutine的c 实现 感觉不错

相关推荐

    轻量级Web服务器选择

    - **C语言**:许多轻量级Web服务器都是用C语言编写的,因为C语言能够提供更好的性能和较低的资源消耗。 - **Erlang**:Erlang是一种适合编写并发程序的语言,因此使用Erlang编写的Web服务器在处理高并发请求时表现...

    Java轻量级线程库Quasar.zip

    Quasar 是一个 Java 库,提供了高性能、轻量级的线程,类似 Go 语言的 Channel,Erlang 语言的 Actor 和其他异步编程工具。 In Maven:  <groupId>co.paralleluniverse  <artifactId>quasar-core  <version>0.4.0...

    erlang nif test

    - **线程安全**:Erlang的并发模型基于轻量级进程,而C代码可能涉及到线程。因此,必须确保C代码是线程安全的,尤其是在多线程环境下操作共享数据时。 - **内存管理**:Erlang VM负责内存的分配和回收,但NIF代码...

    erlang资源

    1. **并发模型**:Erlang的并发基于轻量级进程(Lightweight Processes, LSPs),这些进程间的通信通过消息传递实现,这与传统的线程模型不同,具有更好的隔离性和容错性。 2. ** OTP(Open Telecom Platform)**:...

    erlang 深度分析

    - **实现**: 利用Erlang的轻量级进程模型和自动任务分配机制。 - **优势**: - **高效利用硬件资源**: 在多核处理器上能够充分利用硬件资源。 - **简化并发编程**: 开发者无需关心具体的并行细节。 #### 14. ...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。 使用Erlang来编写分布式应用...

    Erlang深度分析

    分布式应用由多个节点构成,节点之间通过轻量级的进程通信机制交换消息。这种设计使得Erlang非常适合于构建高可用和可扩展的网络服务。 ##### 1.3 减少Linux swap对Erlang程序的影响 在Erlang程序运行时,如果Linux...

    Erlang_win64_24.2 64位 rabbitmq 必要环境

    Erlang以其强大的错误恢复能力、轻量级进程(线程)以及热代码升级特性而闻名。 标题“Erlang_win64_24.2 64位 rabbitmq 必要环境”暗示了我们讨论的是Erlang的特定版本——24.2,用于64位Windows操作系统,并且是...

    Erlang Programming 导读.pdf

    Erlang 的核心特性之一是它的轻量级进程模型,这使得开发者能够很容易地编写高度并发的应用程序。 **Erlang 包括以下几个主要部分:** - **Erlang 虚拟机 (Erlang Virtual Machine, VM)**: 类似于 Java 虚拟机 (JVM...

    Erlang_CNode用户指南

    Erlang的进程是轻量级的,可以快速创建和销毁,这使得它非常适合处理大量并发连接。此外,Erlang采用软实时特性,允许系统在面临故障时优雅降级,而不是完全崩溃。其错误处理机制鼓励程序员通过“let it crash”原则...

    Programming Erlang

    书中会详细讨论进程(process),它们在Erlang中的地位相当于轻量级线程,具有独立的内存空间和消息传递机制。通过案例,读者可以理解如何创建、通信和同步进程,以及如何利用错误处理机制来实现容错设计。 此外,...

    并发需求下的Scala及Erlang语言的比较与使用

    - **Erlang**: 在Erlang中,轻量级进程被当作Actor单元,由Erlang虚拟机(BEAM)直接管理和调度。这些进程具有极低的内存占用和切换开销,非常适合大规模并发处理。Erlang的并发模型强调无共享内存和不可变数据结构...

    erlang-18.0-win64

    Erlang是一个结构化,动态类型...使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

    erlang 程序设计 源码

    1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多。进程间通信通过消息传递实现,这是Erlang并发模型的核心。 2. **故障恢复与容错**...

    Erlang学习资料

    - **轻量级进程**:Erlang中的进程非常轻量级,创建和销毁成本低,可以轻松地管理成千上万个并发进程。 - **容错性**:Erlang支持热更新和软实时系统,能够很好地处理错误和异常情况,这对于构建高可用性和高可靠性...

    erlang及其应用

    应用程序通常由数百甚至数千个轻量级进程组成,这些进程之间通过消息传递进行通信。在Erlang中进行进程切换的成本比C程序中的线程切换低一个或两个数量级。 3. **分布式编程**:Erlang的分布式机制是透明的,这意味...

    erlang lib of iconv

    4. **并发与多线程**:由于Erlang的轻量级进程模型,这个库可能使用进程池来并行处理多个转换任务,提高效率。 5. **内存管理**:Erlang Lib of Iconv是如何管理内存的,特别是在处理大文件或大量数据时。 **工具...

    erlang-18.3-1.el7.centos.x86_64.zip

    Erlang的BEAM虚拟机(Erlang虚拟机)允许在单个进程中创建大量轻量级线程,称为进程,这些进程之间的通信高效且易于实现。此外,Erlang具有强大的热代码替换功能,可以在不中断服务的情况下更新运行中的代码,这对于...

    erlang-java聊天

    在构建聊天系统时,Erlang的轻量级进程(也称为Erlang进程)可以有效地支持多用户间的实时消息传递。此外,Erlang的分布式特性使得在多台机器上部署和扩展聊天服务变得简单。 **Java的普及与优势** Java是广泛应用...

Global site tag (gtag.js) - Google Analytics