This topic created in 5038 days ago, the information mentioned may be changed or developed.
因为使用Twisted开始接触异步,自认为了解异步的原理了。从一开始就喜欢把异步和多线程编程作对比。感觉两者是对充分利用资源的两种不同途径。
可是我一直不太清晰的是,两者的异同。目前的感觉是,程序IO block较多的,用异步会很合适。自己多线程的代码写的很少,只是大学里用java的时候写过一点。后来工作一直用PHP以及Python,几乎没用到过多线程。
在这里希望大家能讨论讨论,以加深甚至纠正我对异步的认识。
谢谢。
2 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
phuslu Sep 26, 2012 1
python 的异步的话, twisted 的异步还是略显复杂了, 建议看 tornado 里面的 IOLoop/IOStream 的实现. 然后再看看 gevent 挺好的.
|
 |
|
2
oobleck Sep 26, 2012 4
你说的多线程应该指的是同步多线程
同时处理多任务主要要解决的问题是怎么保存每个任务的上下文,比如同时下载多个文件,需要保存当前下载了哪些内容,接下来应该请求哪些内容
而同步多线程和是解决这个问题的两种不同方式
同步多线程采用的方法是保存整个调用栈,下次再轮到这个任务时再恢复调用栈来继续之前未完成的操作。就好比外星人把你大脑中的记忆保存下来,洗脑之后让你干别的事,完了之后再把你大脑复原到洗脑之前,对你来说,就好像中间的一些都没发生过一样
异步的方式是,代码中自己保存每个任务的上下文,只保存需要的上下文即可。好比你一件事做到一半要去做别的,就要先把这件事在小本儿上记下来,等做完别的回来看下小本儿,就知道刚才做到哪了,然后接着做。
所以可以明显看出来 同步多线程比异步多做了很多操作(本来只用在小本儿上记下来一点的,结果把你整个大脑的记忆都拷贝下来了),这样在同时进行的任务比较多的时候,时间都浪费在洗脑(线程切换)上了,所以异步效率更高
但同步多线程也不是没有优点,对于程序员来说不同手动记录上下文,操作系统会自动调度,写起来更方便(毕竟小本儿要自己手抄,洗脑是外星人帮你洗)
|