Android技术知识Android开发经验谈Android开发

同步、异步、阻塞、非阻塞、并行、并发

2018-11-14  本文已影响25人  瓶子里的王国

并行、并发

并行和并发比较好理解

阻塞、非阻塞

当线程中调用某个函数,需要IO请求,或者暂时得不到竞争资源,操作系统会把该线程阻塞起来,避免浪费CPU资源,等得到了资源,再变成runnable状态,等待CPU调度。阻塞和非阻塞用来形容多线程间的相互影响。

同步、异步

同步例子

int n = func();
next();
//func()的结果没有返回,next()就不会执行,直到func()方法中的代码运行完并返回

异步例子

Callback callback = new Callback() {   //func结果回调
        @Override
    public void onResult(int n) {
        // n就是异步执行完之后的结果
    }
};
func(callback);
next();
//func方法里面可能有异步的耗时操作,这里直接传过去一个callback,然后直接返回,接着执行next方法
//等到func中的耗时操作执行完之后,再通过callback回调通知调用者结果

同步与阻塞、异步与非阻塞是完全不同的概念。同步和异步形容的是方法调用时是否立即返回;阻塞和非阻塞形容的是多线程并行运行时对资源的占有情况。
同步调用的时候,虽然调用没有立即返回,但是它在运行状态中,CPU很可能还在执行这段代码;而如果一个线程被阻塞了,它一定是放弃了CPU的执行权,不再在CPU中运行了。

上面两组概念就有了4中组合:

上一篇下一篇

猜你喜欢

热点阅读