`
qiezi
  • 浏览: 491832 次
  • 性别: 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 实现 感觉不错

相关推荐

    Java轻量级线程库Quasar.zip

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

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

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

    erlang-18.0-win64

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

    Erlang程序设计

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

    esqlite:sqlite的Erlang NIF

    硬玉 sqlite3的Erlang nif库。 介绍 该库允许您使用来自erlang的出色的sqlite引擎。... 这是通过在轻量级线程中处理来自erlang的所有命令来完成的。 将命令添加到线程的命令队列后,erlang调度程序将重新获得控制权。

    fake:嵌入式脚本语言轻量级嵌入式脚本语言

    假轻量级嵌入式脚本语言简介fake是一种轻量级的嵌入式脚本语言,使用c ++语言编写,使用语法吸取自lua,golang,erlang,flex,bison生成语法树,编译成字节码解释执行。脚本特性运行环境linux amd64,MacOS amd64...

    java纤程库-quasar,线程的线程

    Quasar提供了高性能轻量级的线程,提供了类似Go的channel,Erlang风格的actor,以及其它的异步编程的工具,可以用在Java和Kotlin编程语言中。Scala目前的支持还不完善,我想如果这个公司能快速的发展壮大,或者被...

    程序员为什么还要刷题-generic-linked-in-driver:用于接口Erlang和C的通用非阻塞链接驱动程序

    程序之间的通信提供一个轻量级和干净的泛型实现。 它从头开始设计以支持多线程、非阻塞操作,能够在调用之间保持状态并且完全可定制。 这个通用驱动程序背后的基本原理是为这两种语言之间的通信提供默认和干净的实现...

    splinter:Rust 的 Erlang 风格 actor

    因此,actor 提供了一种实现轻量级并发的好方法。 这个项目深受 Scala 演员库启发。 特征: 演员是无类型的 Actor 是轻量级的(每 GB 内存约 1000 万个) 数以百万计的演员可以共享一个线程 例子 在这个例子中...

    opt_win64_21最新

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

    python-2.6.5-stackless.msi

    Stackless为 Python带来的微线程扩展,是一种低开销、轻量级的便利工具,如果使用得当,可以获益如下:  (1)改进程序结构  (2)增进代码可读性  (3)提高编程人员生产力  以上是Stackless Python很简明的...

    python-3.1.2-stackless.msi

    Stackless为 Python带来的微线程扩展,是一种低开销、轻量级的便利工具,如果使用得当,可以获益如下:  (1)改进程序结构  (2)增进代码可读性  (3)提高编程人员生产力  以上是Stackless Python很简明的...

    Elixir:动态,功能性语言,旨在构建可扩展的应用程序-开源

    所有Elixir代码都在隔离的轻量级执行线程(称为进程)中运行,并通过消息交换信息。 由于它们的轻量性质,在同一台计算机上同时运行成千上万个进程并不少见。 隔离允许对进程进行独立的垃圾收集,从而减少系统范围...

    springCloud

    3)Spring Cloud Bus Spring Cloud Bus 将分布式系统的节点通过轻量级消息代理连接起来。用于在集群中传播状态更改(例如配置更改事件)或其他管理指令。Spring Cloud Bus 的一个核心思想是通过分布式的启动器对 ...

Global site tag (gtag.js) - Google Analytics