多线程与异步
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、异步的使用场景:只有一个线程访问当前的数据。比如,观察者模式,没有共享区,主题发生变化,通知观察者更新,主题继续做自己的事情,不需要等待观察者更新完成后再工作。
异步指的是:例如:A在买东西,B店员需要去拿东西给A看,这个时候可以A继续看东西,而B去拿东西.等待B拿到后通知A.这个过程A是可以继续工作,在B完成后通知A。当然异步的实现还是依赖于多线程。因为有异步回调
多线程:最常用的是解决页面大数据卡住问题,用另外线程去取数据,等取到后在刷新到页面上,这样就不会卡主界面,影响用户体验
异步:也可以用到这情况界面先打开,同时请求数据(这在第2线程做),然后等待响应,响应到后,把数据刷新到界面异步一般是这样:client注册事件到server,当server接受到请求后再通知client
1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢? 举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做完一个任务后,再去做另一个任务。多线程就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?因为,多线程要在不同的任务之间切换,切换肯定是要耗费时间的。那么问题来了,既然多线程比单线程更耗费时间,为什么还要多线程? 单线程有一个致命的问题,就是一个线程运行的整个过程中,其他线程必须等待,不能响应用户的命令,用户体验太差,好像电脑死机一样。假如单线程,你能想象一下,用户在听歌的时候不能写文档,这种体验也太差了。多线程的时候,单核CPU一会做这个任务,一会做那个任务,切换的时间是毫秒级的,用户完全感觉不出来。从而给用户照成错觉,感觉这些任务并行的运行。多线程引入的目的就是提高cpu的利用率,听歌的时候如果不开启多线程,那么cpu基本大部分时间都是空闲的,如果听歌的时候有开启别的线程,提高了cpu的利用率,对于用户来说,时间就节约了很多了。对于用户来说相当于并发的执行了听歌+n个别的任务。
2、同步的使用场景:多个线程同时访问一块数据,也叫共享区。对于多个线程同时访问一块数据的时候,必须使用同步,否则可能会出现不安全的情况。比如数据库中的脏读。但是,多个线程同时访问一块数据,有一种情况不需要同步技术,那就是原子操作,也就是说操作系统在底层保证了操作要么全部做完,要么不做。
3、异步的使用场景:只有一个线程访问当前的数据。比如,观察者模式,没有共享区,主题发生变化,通知观察者更新,主题继续做自己的事情,不需要等待观察者更新完成后再工作。
相关文章推荐
- 多线程异步非阻塞的服务器框架设计图
- 同步异步,并发并行、多线程 比较
- 并发 并行 同步 异步 多线程的区别
- 多线程操作之异步委托
- 黑马程序员 多线程异步集合笔记
- 个人对于异步和多线程的关系的理解分享
- Android开发学习笔记(8):浅谈Handler实现多线程和异步处理
- 并发 并行 同步 异步 多线程的区别
- 多线程与异步的区别
- asio的异步多线程实现
- c#多线程与异步开发 (上)
- 并发 并行 同步 异步 多线程的区别
- C#.net同步异步SOCKET通讯和多线程总结2
- 浅析C#中异步和多线程的区别
- 阻塞,非阻塞,异步,同步,单线程,多线程
- abort()函数不是多线程安全的,但它是异步信号安全的。
- 异步与多线程的区别
- 建议71:区分异步和多线程应用场景
- Thrift 多线程半同步半异步的服务模型-TThreadedSelectorServer
- C# 多线程与异步操作实现的探讨(推荐)