Atitit.异步编程 java .net php python js 对照

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

 

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

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

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

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

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

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

4. AEF框架的实现.. 2api

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引入了两个keywordasyncawait以提供一种更为简洁的异步方法调用模式。

5

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

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

7.4.2. 经过.net Framework 4.0 引入的TPLTask Parallel Library)任务并行库。 6

7.4.3. 经过异步托付(BeginInvoke/EndInvoke)调用。 6

7.4.4. 经过BackgroundWorker, BackgroundWorkerWinForm, 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)

 

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

 

做者:: 老哇的爪子 Attilax 艾龙。  EMAIL:1466519819@qq.com

转载请注明来源: 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.netapi都使用起来...实现兰...

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引入了两个keywordasyncawait以提供一种更为简洁的异步方法调用模式。

 

  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 引入的TPLTask Parallel Library)任务并行库。

         TPL中最基本的两个类是TaskParallel。而新版C++标准中也引入了相似的概念parallel_for, parallel_foreach, parallel_invoke等。

         具体信息见下面连接。

7.3.3. 经过异步托付(BeginInvoke/EndInvoke)调用。

 

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

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

9. Python api

10. Javascript ,ajax +timer

 

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

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

 

12.  參考

InvokeBeginInvoke的使用(转载)_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

我要啦免费统计
相关文章
相关标签/搜索