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: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.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
Atitit.异步编程 java .net php python js 的比较相关推荐
- Atitit.异步编程 java .net php python js 对照
Atitit.异步编程 java .net php python js 的比較 1. 1.异步任务,异步模式, APM模式,, EAP模式, TAP 1 1.1. APM模式: Beg ...
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面...
Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...
- 深入理解python异步编程_深入理解Python异步编程
1 什么是异步编程 1.1 阻塞程序未得到所需计算资源时被挂起的状态. 程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的. 常见的阻塞形式有:网络I/O阻塞.磁盘I/O ...
- python3异步编程_协程 Python异步编程(asyncio)
协程(Coroutine) 也可以被称为微线程,是一种用户态内的上下文切换技术.简而言之,其实就是通过一个线程实现代码块相互切换执行. 直接上代码,例如: 同步编程 import time def f ...
- Python网络编程(4)——异步编程select epoll
在SocketServer模块的学习中,我们了解了多线程和多进程简单Server的实现,使用多线程.多进程技术的服务端为每一个新的client连接创建一个新的进/线程,当client数量较多时,这种技 ...
- 《Python分布式计算》第2章 异步编程 (Distributed Computing with Python)
序言 第1章 并行和分布式计算介绍 第2章 异步编程 第3章 Python的并行计算 第4章 Celery分布式应用 第5章 云平台部署Python 第6章 超级计算机群使用Python 第7章 测试 ...
- 深入理解Python异步编程
声明:本文为转载内容 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知道如何使用 Tornado.Twisted. ...
- 深入理解 Python 异步编程
原文地址:点击打开链接 来源:阿驹(微信公号:驹说码事) 如有好文章投稿,请点击 → 这里了解详情 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它. ...
- JavaScript异步编程原理
众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...
- javascript的异步编程
异步编程 虽然已经可以使用jweb worker支持了多线程,但是主流的js开发仍然是异步编程 采用单线程模式工作的原因 因为js设计初衷用于浏览器的脚本语言,为了实现页面交互就必须要进行dom操作, ...
最新文章
- 今天被TensorFlowLite刷屏了吧,偏要再发一遍
- PHP正则表达式详解
- python阿里巴巴排名_python使用urllib模块和pyquery实现阿里巴巴排名查询
- 归纳+记忆:让机器像人一样从小样本中学习
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
- 关于CSplitterWnd类窗口静态分割总结
- 马斯克证实:特斯拉将加大在中国的投资和研发力度
- Tensorflow——Tensorflow的用途、安装、数据流图
- hbm配置文件 hibernate中
- Pycharm 转化ui文件为py文件:报错Error in input file: not well-formed (invalid token): line 1, column 1
- Visual FoxPro 6.0~9.0解决方案与范例大全写作原稿及光盘下载
- POI介绍及视频教程
- 多开工具,终于给找来了~
- js-入门(字符串-运算符) html常用命令代码行
- AR和VR,有哪些知名的开源平台
- Mongodb 监控安装配置
- android viewpager标题,ViewPager顶部导航栏联动效果(标题栏条目多)
- LVS+Nginx实现高可用集群
- 机器视觉工程师前景如何,计算机视觉工程师前景
- lammps 案例in文件汇总