积极答复者
C#并行编程疑惑

问题
答案
-
并行编程和异步编程我认为是顺序和线程之间相对调用的问题:
1)并行:多个线程“并发”处理,他们之间是平级关系。
2)异步操作:主线程(UI)处理某个异步行为的时候,后台开辟一个线程去处理;并非是主线程自己去执行!——异步线程完成任务之后通过回调函数向主程序报告任务已经完成。所以异步编程——无论是时间片轮转还是线程,大体上还是按照UI来处理的。至于说“时间片”或者“线程”——只是“异步实现”的不同策略方式而已。
.net中delegate默认就是后台线程,下面证明:
public class MainTest { static void MyFun(int i) { Console.WriteLine(Thread.CurrentThread.IsThreadPoolThread); } static void Main(string[] args) { Action<int> act = new Action<int>(MyFun); act.BeginInvoke(100, null, null); Console.Read(); } }
输出True。证明完毕。- 已标记为答案 Bob ShenModerator 2012年10月2日 7:18
全部回复
-
并行编程:就是说有N个线程同时分别处理任务,不是按照顺序执行,可能导致完成任务的顺序有先后,因此适用于把一个大任务划分成为若干个子任务后分线程分别完成。
异步编程:执行顺序上按照一定顺序进行,在“异步”的代码块或者函数中按照CPU轮转片机制,但是主线程照旧执行,同时该异步方法提供一个委托回调机制(或者是事件),这样便于一旦异步行为完成之后立即回调报告主程序任务已经完成,或者启用事件机制。
- 已编辑 ThankfulHeartModerator 2012年9月21日 2:42
-
并行编程和异步编程我认为是顺序和线程之间相对调用的问题:
1)并行:多个线程“并发”处理,他们之间是平级关系。
2)异步操作:主线程(UI)处理某个异步行为的时候,后台开辟一个线程去处理;并非是主线程自己去执行!——异步线程完成任务之后通过回调函数向主程序报告任务已经完成。所以异步编程——无论是时间片轮转还是线程,大体上还是按照UI来处理的。至于说“时间片”或者“线程”——只是“异步实现”的不同策略方式而已。
.net中delegate默认就是后台线程,下面证明:
public class MainTest { static void MyFun(int i) { Console.WriteLine(Thread.CurrentThread.IsThreadPoolThread); } static void Main(string[] args) { Action<int> act = new Action<int>(MyFun); act.BeginInvoke(100, null, null); Console.Read(); } }
输出True。证明完毕。- 已标记为答案 Bob ShenModerator 2012年10月2日 7:18