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引入了兩個keywordasync、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)。
?
???什么須要異步模式?所謂模式,事實上是一種方法,就跟上篇博客里所講的。是從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.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引入了兩個keywordasync、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
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/zfyouxi/p/4666818.html
總結
以上是生活随笔為你收集整理的Atitit.异步编程 java .net php python js 对照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 存储过程参数输入输出
- 下一篇: 盘点机器学习和统计模型的差异