您的位置:首页 > 其它

多线程与异步

2013-06-19 15:33 134 查看
异步和多线程是两个概念多线程至多个任务同时处理(宏观,根据处理器核心数量有关系)

异步指的是:例如:A在买东西,B店员需要去拿东西给A看,这个时候可以A继续看东西,而B去拿东西.等待B拿到后通知A.这个过程A是可以继续工作,在B完成后通知A。当然异步的实现还是依赖于多线程。因为有异步回调

多线程:最常用的是解决页面大数据卡住问题,用另外线程去取数据,等取到后在刷新到页面上,这样就不会卡主界面,影响用户体验

异步:也可以用到这情况界面先打开,同时请求数据(这在第2线程做),然后等待响应,响应到后,把数据刷新到界面异步一般是这样:client注册事件到server,当server接受到请求后再通知client

1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢? 举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做完一个任务后,再去做另一个任务。多线程就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?因为,多线程要在不同的任务之间切换,切换肯定是要耗费时间的。那么问题来了,既然多线程比单线程更耗费时间,为什么还要多线程? 单线程有一个致命的问题,就是一个线程运行的整个过程中,其他线程必须等待,不能响应用户的命令,用户体验太差,好像电脑死机一样。假如单线程,你能想象一下,用户在听歌的时候不能写文档,这种体验也太差了。多线程的时候,单核CPU一会做这个任务,一会做那个任务,切换的时间是毫秒级的,用户完全感觉不出来。从而给用户照成错觉,感觉这些任务并行的运行。多线程引入的目的就是提高cpu的利用率,听歌的时候如果不开启多线程,那么cpu基本大部分时间都是空闲的,如果听歌的时候有开启别的线程,提高了cpu的利用率,对于用户来说,时间就节约了很多了。对于用户来说相当于并发的执行了听歌+n个别的任务。

2、同步的使用场景:多个线程同时访问一块数据,也叫共享区。对于多个线程同时访问一块数据的时候,必须使用同步,否则可能会出现不安全的情况。比如数据库中的脏读。但是,多个线程同时访问一块数据,有一种情况不需要同步技术,那就是原子操作,也就是说操作系统在底层保证了操作要么全部做完,要么不做。

3、异步的使用场景:只有一个线程访问当前的数据。比如,观察者模式,没有共享区,主题发生变化,通知观察者更新,主题继续做自己的事情,不需要等待观察者更新完成后再工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: