1
phuslu 2012-09-26 12:23:57 +08:00 1
python 的异步的话, twisted 的异步还是略显复杂了, 建议看 tornado 里面的 IOLoop/IOStream 的实现.
然后再看看 gevent 挺好的. |
2
oobleck 2012-09-26 15:24:04 +08:00 4
你说的多线程应该指的是同步多线程
同时处理多任务主要要解决的问题是怎么保存每个任务的上下文,比如同时下载多个文件,需要保存当前下载了哪些内容,接下来应该请求哪些内容 而同步多线程和是解决这个问题的两种不同方式 同步多线程采用的方法是保存整个调用栈,下次再轮到这个任务时再恢复调用栈来继续之前未完成的操作。就好比外星人把你大脑中的记忆保存下来,洗脑之后让你干别的事,完了之后再把你大脑复原到洗脑之前,对你来说,就好像中间的一些都没发生过一样 异步的方式是,代码中自己保存每个任务的上下文,只保存需要的上下文即可。好比你一件事做到一半要去做别的,就要先把这件事在小本儿上记下来,等做完别的回来看下小本儿,就知道刚才做到哪了,然后接着做。 所以可以明显看出来 同步多线程比异步多做了很多操作(本来只用在小本儿上记下来一点的,结果把你整个大脑的记忆都拷贝下来了),这样在同时进行的任务比较多的时候,时间都浪费在洗脑(线程切换)上了,所以异步效率更高 但同步多线程也不是没有优点,对于程序员来说不同手动记录上下文,操作系统会自动调度,写起来更方便(毕竟小本儿要自己手抄,洗脑是外星人帮你洗) |