V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhangxiao
V2EX  ›  问与答

关于异步编程一直有些疑惑

  •  
  •   zhangxiao · 2012-09-26 12:08:41 +08:00 · 2833 次点击
    这是一个创建于 4441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为使用Twisted开始接触异步,自认为了解异步的原理了。从一开始就喜欢把异步和多线程编程作对比。感觉两者是对充分利用资源的两种不同途径。

    可是我一直不太清晰的是,两者的异同。目前的感觉是,程序IO block较多的,用异步会很合适。自己多线程的代码写的很少,只是大学里用java的时候写过一点。后来工作一直用PHP以及Python,几乎没用到过多线程。

    在这里希望大家能讨论讨论,以加深甚至纠正我对异步的认识。

    谢谢。
    2 条回复    1970-01-01 08:00:00 +08:00
    phuslu
        1
    phuslu  
       2012-09-26 12:23:57 +08:00   ❤️ 1
    python 的异步的话, twisted 的异步还是略显复杂了, 建议看 tornado 里面的 IOLoop/IOStream 的实现.
    然后再看看 gevent 挺好的.
    oobleck
        2
    oobleck  
       2012-09-26 15:24:04 +08:00   ❤️ 4
    你说的多线程应该指的是同步多线程

    同时处理多任务主要要解决的问题是怎么保存每个任务的上下文,比如同时下载多个文件,需要保存当前下载了哪些内容,接下来应该请求哪些内容

    而同步多线程和是解决这个问题的两种不同方式

    同步多线程采用的方法是保存整个调用栈,下次再轮到这个任务时再恢复调用栈来继续之前未完成的操作。就好比外星人把你大脑中的记忆保存下来,洗脑之后让你干别的事,完了之后再把你大脑复原到洗脑之前,对你来说,就好像中间的一些都没发生过一样

    异步的方式是,代码中自己保存每个任务的上下文,只保存需要的上下文即可。好比你一件事做到一半要去做别的,就要先把这件事在小本儿上记下来,等做完别的回来看下小本儿,就知道刚才做到哪了,然后接着做。

    所以可以明显看出来
    同步多线程比异步多做了很多操作(本来只用在小本儿上记下来一点的,结果把你整个大脑的记忆都拷贝下来了),这样在同时进行的任务比较多的时候,时间都浪费在洗脑(线程切换)上了,所以异步效率更高

    但同步多线程也不是没有优点,对于程序员来说不同手动记录上下文,操作系统会自动调度,写起来更方便(毕竟小本儿要自己手抄,洗脑是外星人帮你洗)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2649 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:14 · PVG 19:14 · LAX 03:14 · JFK 06:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.