解决方案 »

  1.   

    还是没明白,什么意思,我的理解是:多线程的目的是为了实现异步,异步的目的是为了实现更充分的利用CPU资源。因为异步不需要等待cpu处理完一个线程之后再来处理另一个线程,而在单核里面其实多线程并没有加快处理速度,只是用户交互性更好。不知道这样理解对不对,假如理解对了,不过还是不知道什么时候用异步,什么时候用同步,另外计算处理计算机程序的时候,最小的单位 是线程的话,那么是怎么实现不同程序之间的切换的,一个程序只能有一个进程吗?
      

  2.   

    什么是"一个程序"?
    如果你搞不明白程序是什么,就不要谈一个程序到底有几个进程多线程有时候是为了提高效率
    即使是单核,线程如果不是非常占用CPU,而是有大量时间都在等待IO读写,那么使用多线程在单核CPU上一样可以提高效率更多的时候是为了不阻塞主线程的UI如果你不能真正的理解线程在CPU里到底是如何切换的,CPU是怎样调度线程执行的,建议还是补一补基础
    这些东西可能在高中的时候就学过,而大学里计算机基础中也反复讲过,只不过大部分人认为没什么用,都不去认真学习
      

  3.   


    瞎掰,多线程跟异步没有什么关系。异步方式的调用,就是回调当前程序注册的另外一段程序代码。比如说我写public void BeginAdd(int a, int b, Action<int> callback)
    {
        var x = a+b;
        callback(x);
    }这个程序方法就是异步调用形式的,在方法里隐藏了这个callback回调的时机。我也可能是实现为public void BeginAdd(int a, int b, Action<int> callback)
    {
        var x = a+b;
        ThreadPool.QueueUserWorkItem(h=>
        {
            var y =x + 1;
            Thread.Sleep(50000);
            callback(y-1);
        });
    }而在你调用这个Add方法时可能根本不清楚内部是如何实现、如何重构的。在参数定义上,这是异步回调形式。仅此而已。异步回调跟什么多线程,没有直接的联系。只不过,我们的多线程程序设计中,往往喜欢使用异步回调形式而已。
      

  4.   

    同步调用与异步调用,是一个细微的差别,就相当于“自己自然怀孕还是人工辅助怀孕”一样,它表示的是程序接口设计形式倾向于哪一种。跟多线程并没有直接的关系。但是既然我们要使用更加繁琐的那种形式,往往是有其用意的。原因之一,就是因为我们的api在另外一个子线程中进行回调。
      

  5.   

    异步调用跟程序(也就是上面的callback委托)是不是在子线程中执行,没有必然的联系。有人可能以为“子线程中执行callback才能叫做异步调用。否则就叫做同步调用”。如果是这样认为的,那么说“异步调用”往往也就没有什么意义了,因为代码 Add 内部是可以重构的,甚至线程池也是可以重复使用线程的(你的调用Add方法的父线程完全可能立刻结束了,随后被线程池重新分配给这个Add过程,用来回调callback)。说异步调用,是我们画流程图、进行程序设计时为了灵活性而可以使用的形式,此时无法纠结于底层最终实现。它具有灵活性,所以在同步执行或者异步执行callback时都可以使用异步调用callback的语法形式。