Atitit.异步编程 java .net php python js 的比较

Atitit.异步编程 java .net php python js 的比较

1. 1、异步任务,异步模式,  APM模式,,  EAP模式, TAP 1

1.1.       APM模式: BeginXXX/EndXXX, IAsyncResult
2

1.2.       EAP模式(基于事件的异步模式)
2

1.3.      TAP(基于任务的异步模式)
2

2. 异步的实现机制::主要是通过线程and线程池实现的... 2

3. 异步编程的开发::当前都是通过api的,将来应该可以使用注解方式
2

4. AEF框架的实现.. 2

5. 通用异步编程api 跟特定模块的异步api 3

6. Java 通用异步编程api ExecutorService.submit() 3

6.1. Java 特定模块的异步api,例如nio 3

7. .net  ::Begin/End模式 ( Invoke或者BeginInvoke,,) 3

7.1.1. ISynchronizeInvoke.BeginInvoke 方法 (System.ComponentModel) 4

7.2. .net 也有特定模块异步api WebClient 5

7.3. C#5.0引入了两个关键字async、await以提供一种更为简洁的异步方法调用模式。
5

7.4.    线程池如此方便,我们怎么使用线程池呢?可以通过以下几种方式:
6

7.4.1. 通过类方法ThreadPool.QueueUserWorkItem直接调用。
6

7.4.2. 通过.net Framework 4.0 引入的TPL(Task Parallel Library)任务并行库。
6

7.4.3. 通过异步委托(BeginInvoke/EndInvoke)调用。
6

7.4.4. 通过BackgroundWorker, BackgroundWorker是WinForm, WPF下的一个控件,主要用于提供UI控件下的协作式取消,进度报告等。
6

8. PHP异步执行的常用方式 fscokopen()函数 6

9. Python api 6

10. Javascript ,ajax +timer 6

11. .net 跟java的异步处理比较 7

12. 参考 7

1.  1、异步任务,异步模式,  APM模式,,  EAP模式, TAP

异步任务是由一系列的事件处理器(EventHandler)和Event(事件)组成,EventHandlers之间的通讯通过Event来实现。每一个EventHandler占用一个线程(Thread)。

    什么需要异步模式?所谓模式,其实是一种方法,就跟上篇博客里所讲的,是从工程实践中总结出来的解决相似或特定问题的一种惯用手段。常见的异步模式包括:

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

1.1.       APM模式: BeginXXX/EndXXX, IAsyncResult

1.2.       EAP模式(基于事件的异步模式)

Windows Form

MethodNameAsync

Event

1.3.      TAP(基于任务的异步模式)

MethodNameAsync

Task/Task<Result>

2. 异步的实现机制::主要是通过线程and线程池实现的...

3. 异步编程的开发::当前都是通过api的,将来应该可以使用注解方式

当前支持注解的只有sevlet3 ... java  async-supported

4. AEF框架的实现..

实现思路:不个java.net的api都使用起来...实现兰...

And实现自己的api::::core.exeAsyn(Closue c)

中间,都能行上自己喜欢的api风格...

5.  通用异步编程api 跟特定模块的异步api

通用api比较代码多...

特定api更简化....

6. Java 通用异步编程api ExecutorService.submit()

Executors.newSingleThreadExecutor().submit(new Callable

ExecutorService继承自Executor,它的目的是为我们管理Thread对象,从而简化并发编程,Executor使我们无需显示的去管理线程的生命周期,是JDK 5之后启动任务的首选方式。

6.1. Java 特定模块的异步api,例如nio

7. .net  ::Begin/End模式 ( Invoke或者BeginInvoke,,)

(其实现方法一共有四种,请参考DebugLZQ前面的博文:.NET异步编程总结----四种实现模式)。

7.0.1. ISynchronizeInvoke.BeginInvoke 方法 (System.ComponentModel)

Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。

Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。

Invoke或者BeginInvoke方 法都需要一个委托对象作为参数。委托类似于回调函数的地址,因此调用者通过这两个方法就可以把需要调用的函数地址封送给界面线程。这些方法里面如果包含了 更改控件状态的代码,那么由于最终执行这个方法的是界面线程,从而避免了竞争条件,避免了不可预料的问题。如果其它线程直接操作界面线程所属的控件,那么 将会产生竞争条件,造成不可预料的结果。

通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

使用Invoke完成一个委托方法的封送,就类似于使用SendMessage方法来给界面线程发送消息,是一个同步方法。也就是说在Invoke封送的方法被执行完毕前,Invoke方法不会返回,从而调用者线程将被阻塞。

使用BeginInvoke方法封送一个委托方法,类似于使用PostMessage进行通信,这是一个异步方法。也就是该方法封送完毕后马上返回,不会等待委托方法的执行结束,调用者线程将不会被阻塞。但是调用者也可以使用EndInvoke方法或者其它类似WaitHandle机制等待异步操作的完成。

但是在内部实现上,Invoke和BeginInvoke都是用了PostMessage方法,从而避免了SendMessage带来的问题。而Invoke方法的同步阻塞是靠WaitHandle机制来完成的。

,那就是Control类上的异步调用BeginInvoke并没有开辟新的线程完成委托任务,而是让界面控件的所属线程完成委托任务的。看来异步操作就是开辟新线程的说法不一定准确。

7.1. .net 也有特定模块异步api WebClient

WebClient作为WebRequest的高层封装,.NET已经帮我们把这个异步模式给封装了

client.DownloadStringAsync(new Uri(uri));

7.2. C#5.0引入了两个关键字async、await以提供一种更为简洁的异步方法调用模式。

private async void button1_Click(object sender, EventArgs e)        {            int length = await ShowUriContentAsyncAwait("http://www.cnblogs.com/DebugLZQ");            textBox1.Text = length.ToString();        }          //        async Task<int> ShowUriContentAsyncAwait(string uri)        {            using (WebClient client = new WebClient())            {                string text = client.DownloadString(uri);                return text.Length;            }        }

7.3.    线程池如此方便,我们怎么使用线程池呢?可以通过以下几种方式:

7.3.1. 通过类方法ThreadPool.QueueUserWorkItem直接调用。

7.3.2. 通过.net Framework 4.0 引入的TPL(Task Parallel Library)任务并行库。

TPL中最主要的两个类是Task和Parallel。而新版C++标准中也引入了类似的概念parallel_for, parallel_foreach, parallel_invoke等。

详细信息见以下链接。

7.3.3. 通过异步委托(BeginInvoke/EndInvoke)调用。

7.3.4. 通过BackgroundWorker, BackgroundWorker是WinForm, WPF下的一个控件,主要用于提供UI控件下的协作式取消,进度报告等。

8. PHP异步执行的常用方式 fscokopen()函数

9. Python api

10. Javascript ,ajax +timer

11. .net 跟java的异步处理比较

韩式java的比较佳,,命名比较好的....

12.  参考

Invoke和BeginInvoke的使用(转载)_oDEo_新浪博客.htm

paip.c#.net 多线程调用控件的问题 - attilax的专栏 - 博客频道 - CSDN.NET.htm

paip.C#.NET多线程访问 toolStripStatusLabel - .NET教程_.NET编程_.NET开发技术文章 - 红黑联盟.htm

关于对java异步编程的思考。 - Martin.Chen - 博客园.htm

NET异步编程总结----四种实现模式 - DebugLZQ - 博客园.htm

从C#5.0说起:再次总结C#异步调用方法发展史 - DebugLZQ - 博客园.htm

PHP异步执行的常用方式 - bravezhe的专栏 - 博客频道 - CSDN.NET.htmpython 网络编程----非阻塞或异步编程-bj2008_0201-ChinaUnix博客.htm

C#下的异步编程及其同步机制 - salomon - 博客园.htm

paip.java 多线程参数以及返回值Future FutureTask 的使用. - attilax的专栏 - 博客频道 - CSDN.NET.htm

Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】 - 蕃薯耀 - ITeye技术网站.htm

时间: 2024-10-09 14:45:55

Atitit.异步编程 java .net php python js 的比较的相关文章

Atitit.异步编程技术原理与实践attilax总结

1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模式(推荐)1 4. Java的实现模式futuretask 对于c#的task类库(推荐)1 4.1. 使用Java 8的CompletableFuture实现函数式的回调.htm2 5. Timer模式2 6. Thread模式(不推荐,太底层)2 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await 2. 事

&lt;史上最强&gt;深入理解 Python 异步编程(上)

前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知道如何使用 Tornado.Twisted.Gevent 这类异步框架上,出现各种古怪的问题难以解决.而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask.Django等传统的非异步框架. 从上两届 PyCon 技术大会看来,异步编程已经成了 Python 生态下一阶段的主旋律.如新兴的 Go.Rust.

深入理解 Python 异步编程(上)

http://python.jobbole.com/88291/ 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知道如何使用 Tornado.Twisted.Gevent 这类异步框架上,出现各种古怪的问题难以解决.而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask.Django等传统的非异步框架. 从上两届 PyCon 技术大会看来,异步编程已经成

Python多线程,多进程,并行,并发,异步编程

Python并发与并行的新手指南:http://python.jobbole.com/81260/ Python 中的多线程,多进程,并发,并行,同步,通信:https://blog.csdn.net/timemachine119/article/details/54091323 python进阶笔记 thread 和 threading模块学习:https://www.cnblogs.com/forward-wang/p/5970640.html Python 中的多线程,多进程,并发,并行,

Atitit.sql&#160;ast&#160;表达式&#160;语法树&#160;语法&#160;解析原理与实现&#160;java&#160;php&#160;c#.net&#160;js&#160;python

Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 2.1. lexer作为一个工具,完成了对SQL字符串的切割,将语句转化成一个tokens数组.3 2.2. Parser完成了SQL解析的后序部分:使用一个lexer对象作为工具,切出tokens,然后解析语义,绑定相关的系统接口.3 2.3. 关系数据和XML数据库下其抽象语法树分别为: 如图

Atitit.&#160;Async&#160;await&#160;优缺点&#160;异步编程的原理and实现&#160;java&#160;c#&#160;php

Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 2.2. 返回值2 2.3. Semaphore 信号量2 2.4. 线程的异常,主线程可以捕获到么2 3. await并不是针对于async的方法,而是针对async方法所返回给我们的Task,2 4. Java里面的task 跟个 await3 5. ---code4 6. async & aw

利用 Python yield 创建协程将异步编程同步化

在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程.也经常会有同学对协程的概念及其作用比较疑惑,本文今天就来探讨下协程的前世今生. 首先回答一个大家最关心的问题:协程的好处是什么? 通俗易懂的回答: 让原来要使用 异步 + 回调 方式写的非人类代码,可以用看似同步的方式写出来. 1.回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里. 但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不

利用python yielding创建协程将异步编程同步化

转自:http://www.jackyshen.com/2015/05/21/async-operations-in-form-of-sync-programming-with-python-yielding/ 目录 回顾同步与异步编程 回顾多线程编程 yield与协程 异步编程同步化 回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里.但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不能让这些任务阻塞

Atitit.面向接口的web&#160;原理与设计重写&#160;路由启动绑定配置url&#160;router&#160;rewriting&#160;urlpage&#160;&#160;mvc&#160;mvp的&#160;java&#160;c#.net&#160;php&#160;js

Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage  mvc mvp的 java c#.net php js 原理 通过vm带入启动参数    制定ioc配置文件 绑定各项.. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <ifra