none
C#并行编程疑惑 RRS feed

  • 问题

  • 请教各位:

    C#中的并行编程(计算)与异步编程,有何区别(不同),各适用于什么场景?

    F#和C#在并行处理方面有何不同或优势?

    谢谢了。

    2012年9月20日 6:40

答案

  • 并行编程和异步编程我认为是顺序和线程之间相对调用的问题:

    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。证明完毕。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月21日 2:55
    版主

全部回复

  • 并行编程:就是说有N个线程同时分别处理任务,不是按照顺序执行,可能导致完成任务的顺序有先后,因此适用于把一个大任务划分成为若干个子任务后分线程分别完成。

    异步编程:执行顺序上按照一定顺序进行,在“异步”的代码块或者函数中按照CPU轮转片机制,但是主线程照旧执行,同时该异步方法提供一个委托回调机制(或者是事件),这样便于一旦异步行为完成之后立即回调报告主程序任务已经完成,或者启用事件机制。


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月20日 10:05
    版主
  • 并行编程与异步编程都是通过多线程技术实现的。是否可以这样认为:并行编程是异步编程的进一步包装,包装为一种与传统编程相似的风格?另外,在处理多个任务时(不是指异步处理步骤中,执行完当前步骤后,再执行另一个步骤),两者的任务处理顺序都是乱序执行的吧?


    • 已编辑 jizhong 2012年9月21日 2:35
    2012年9月21日 2:07
  • 并行编程和异步编程我认为是顺序和线程之间相对调用的问题:

    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。证明完毕。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月21日 2:55
    版主