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

Io Language学习:异步编程

阅读更多
迫不及待地介绍这个特性,来看一下Io是如何在不改变调用过程的情况下让调用变成异步的。

先看一个同步调用:

Slow := Object clone do(
    call := method(i,
        wait(i)
        "DONE" println
        i + 1
    )
)

results := list(1,2,3) map(i,
    Slow clone call(i)
)

results println


这个程序将花上6秒来完成。如果调用本身消耗CPU比较少,就可以并行来运行。上面程序只要修改一行就可以了:
Slow clone @call(i)

由于Io的库实现还很不完善,所以不是所有操作都可以顺利完成,比如把上面的wait(i)换成System system("sleep " .. (i asString))来调用外部程序,在linux上我测试就没有成功,Mac OS X上没有问题。

(注:后来修改了一下程序也测试成功了,看来Io里面有很多小陷阱,这当然是由于它现在还不完善造成的)
(注2:测试有点错误,测试结果还是不支持System system异步调用)

可以和Erlang比较一下,Erlang并行的能力也很强,但你不得不写许多代码来完成这种并行,而且并行写起来并不是很顺手。
1
0
分享到:
评论
3 楼 qiezi 2008-02-16  
静态方法的区别是不使用this/self,某些语言里为了效率会明显区分,javascript里面由于使用了prototype对象,所以调用方式也有不同,但实际上没有必要通过prototype来调用,和其它方法写成一样就可以了。iolanguage里面更不用区分,最好别污染到Object里面。

Foo := Object clone do(
  staticBar := method(x,y,
    x + y
  )
)

Foo staticBar(1,2)
// 和普通方法没有区别
Foo clone staticBar(1,2)
2 楼 hurd 2008-02-08  
不大会用javaeye

javascript 可以写成这样。
var Slow = function(){
     this._call = function(i){
           wait(i)
           "DONE".println;
            return i+1;
      }
}
[1,2,3].map(function(i){
      return new Slow()._call(i); 
}).println;





javascript可以在类定义之后,更改这个类的原形。
var Slow = function(){}
Slow.prototype._call = function(i){
     wait(i)
     "DONE".println;
      return i+1;
}

[1,2,3].map(function(i){
      return new Slow()._call(i); 
}).println;

// 另外可以静态的调用
[1,2,3].map(function(i){
      return Slow.prototype._call(i); 
}).println;





不知道在ioLanguage里如何访问类的静态方法。 是不是这样?
Slow := Object clone do()
Object call := method(i,
      wait(i)
       "DONE" println
       i + 1
 ) 

results := list(1,2,3) map(i, 
        Slow clone call(i)
)

results println

1 楼 hurd 2008-02-08  
javascript 可以写成这样。

var Slow = function(){
      this._call = function(i){
           wait(i)
           "DONE".println;
           return  i+1;
      }
}
[1,2,3].map(function(i){
    return new Slow()._call(i);
}).println;



javascript可以在类定义之后,更改这个类的原形。

javascript 可以写成这样。
var Slow = function(){}
Slow.prototype._call = function(i){
      wait(i) 
      "DONE".println;
      return  i+1;
}
[1,2,3].map(function(i){
    return  new Slow()._call(i);
});

[1,2,3].map(function(i){
   return Slow.prototype._call(i); //静态调用
}).println;



不知道在ioLanguage里如何访问类的静态方法。 是不是这样?
Slow := Object clone do()   
Object call := method(i,   
     wait(i)   
    "DONE" println   
     i + 1  
)  

results := list(1,2,3) map(i,   
    Slow clone call(i)   
)   
  
results println  

相关推荐

    ilchec.github.io:https:ilchec.github.ioKiKoDatabaseKiKo.html

    综上所述,ilchec.github.io项目提供了学习和研究HTML5、CSS3和JavaScript的机会,同时也可以了解GitHub Pages的使用方法以及前端开发的整个工作流程。通过对ilchec.github.io-master文件的分析和实践,开发者可以...

    jacksoncode.github.io:首页:http

    【标题】"jacksoncode.github.io: 首页:http" 涉及到的知识点主要集中在个人静态网页的创建和维护上,这通常包括...通过学习和实践这些知识点,不仅可以建立自己的在线存在,还可以提升编程技能和网络资源的利用能力。

    一些给初学者学习的C#编程的范例,特别适合初学者学习

    学习者应了解异步编程的基本概念,如Task和async方法,以及如何利用这些特性提高程序的响应性。 7. **文件和IO操作**:C#提供了丰富的类库用于读写文件和处理输入输出。学习者需要学习如何打开、读取、写入和关闭...

    laptrinhweb.github.io:网络编程 - Nam Nguyen

    【网络编程 - Nam Nguyen】是Nam Nguyen在laptrinhweb.github.io上分享的一份关于网络编程的资源。在这个项目中,作者深入浅出地探讨了网络编程的基础概念和相关技术,特别是与HTML相关的知识。HTML(HyperText ...

    完整讲述C sharp 《C# 完全手册》

    - 创建桌面应用程序:学习如何使用Windows Forms或WPF构建用户界面。 - 控件和事件处理:理解和使用各种控件,以及事件处理机制。 9. **ASP.NET Web开发**: - MVC(Model-View-Controller)架构:理解和构建Web...

    Csharp编程的学习

    5. **异步编程**:C#引入了async/await关键字,使得异步操作变得简单易懂,这对于处理I/O密集型任务和改善用户体验至关重要。 6. **.NET框架**:C#是.NET平台的一部分,可以使用.NET框架提供的大量类库,如System....

    968页学习资料 编程语言

    学习C#时,你需要掌握类和对象、接口与继承、异常处理、泛型、LINQ(Language Integrated Query)等核心概念,以及最新的C#版本特性,如async/await异步编程模型。 其次,vc++,即Visual C++,是微软的集成开发环境...

    C#学习的常用例子,学习C#的好资料

    - async/await:异步编程模型,提高UI响应性和系统效率,避免阻塞主线程。 8. **IO操作**: - 文件操作:读写文件、创建、删除、复制等。 - 流(Stream):处理二进制数据,如文件、网络数据传输等。 9. **网络...

    viiviii.github.io::sparkles::sparkles::sparkles:

    viiviii.github.io 是一个基于GitHub Pages的个人网站,它使用了HTML(HyperText Markup Language)来构建网页内容。HTML是互联网上应用最广泛的语言,用于创建和设计网页。通过HTML,开发者可以定义网页的结构,...

    The Csharp Programming Language

    6. **异步编程**:C#的async/await关键字简化了异步编程,使开发者能够轻松处理并发和IO密集型任务,提高程序的响应速度。 7. **事件和委托**:C#的事件和委托机制为构建事件驱动的应用程序提供了基础,常用于UI...

    vbnet编程学习

    7. **数据库访问**:学习ADO.NET组件,如DataSet、DataTable、DataAdapter等,用于与SQL Server、Oracle等数据库进行交互,或者使用Entity Framework进行ORM(对象关系映射)操作。 8. **异常处理**:理解Try......

    C#基类库大全2013-04-12.

    10. **System.Threading.Tasks**: 异步编程支持,如Task和async/await关键字,用于编写高性能的多线程和异步代码。 11. **System.Collections.Generic**: 泛型集合类,提高了类型安全性和性能,如List、Dictionary,...

    C#编程百例_code

    8. **异步编程**: 异步编程在处理I/O密集型任务时至关重要,C#的async/await关键字使得编写异步代码变得简单。例子将展示如何利用异步编程提高应用程序的响应速度。 9. **事件和委托**: 这是C#中实现事件驱动编程的...

    asd.rar_clr_vc 异步_visual c_大图像

    总结来说,"VC 2005 CLR如何异步装载大图像文件"这个问题涉及到的关键知识点有:C++/CLI、.NET Framework的CLR、异步编程模型、文件I/O操作、图像解码以及UI线程安全。掌握这些技术,能帮助开发者构建出高效且用户...

    C#的基础100个编程实例

    - 数据类型:学习C#中的基本数据类型和引用类型,以及它们之间的区别。 - 控制流:掌握if语句、switch语句、for循环、while循环、do-while循环等控制流程结构。 - 函数:学习如何定义函数,传递参数,以及返回值...

    C#面试题大全(.NET)

    5. 并发与异步编程: - ThreadPool:线程池用于高效管理线程,减少创建和销毁线程的开销。 - async/await:异步编程的关键特性,允许非阻塞IO操作,提高应用性能。 6. 设计模式: - 工厂模式、单例模式、观察者...

    Rust-关于Rust的相关学习说明了解

    - **概念**:异步编程是指不阻塞主线程的编程方式。 - **实现**:通过 async/await 关键字和 Futures API 实现。 10. **错误处理**: - **机制**:Rust 提供了 Result 和 Option 类型来处理可能失败的操作。 - ...

    myjs-project.io:学习JavaScript

    myjs-project.io 提供了一个学习JavaScript的平台,旨在帮助初学者和有经验的开发者进一步提升他们的技能。 HTML(HyperText Markup Language)是构建网页的基础,与JavaScript紧密相连。在myjs-project.io上,你...

    C#高级编程课件及源码.rar

    理解异步编程的概念和实践,有助于编写高性能的并发应用,尤其在网络I/O密集型的应用中。 5. **委托与事件**:委托是C#中处理回调和事件的关键,而事件则常用于实现用户界面和业务逻辑之间的通信。掌握这两者能帮助...

    Visual C# 2005 文件IO与数据存取秘诀(章立民研究室著) 源代码 CH6-CH7

    《Visual C# 2005 文件IO与数据存取秘诀》是一本深入探讨C#编程中文件输入/输出(I/O)操作...在实际开发中,结合C#的特性,如LINQ(Language Integrated Query)和异步编程模型,可以使文件和数据操作更加简洁和高效。

Global site tag (gtag.js) - Google Analytics