zhangxiao
V2EX  ›  问与答

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

  •  
  •   zhangxiao · Sep 26, 2012 · 3307 views
    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
    phuslu
        1
    phuslu  
       Sep 26, 2012   ❤️ 1
    python 的异步的话, twisted 的异步还是略显复杂了, 建议看 tornado 里面的 IOLoop/IOStream 的实现.
    然后再看看 gevent 挺好的.
    oobleck
        2
    oobleck  
       Sep 26, 2012   ❤️ 4
    你说的多线程应该指的是同步多线程

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

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

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

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

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

    但同步多线程也不是没有优点,对于程序员来说不同手动记录上下文,操作系统会自动调度,写起来更方便(毕竟小本儿要自己手抄,洗脑是外星人帮你洗)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3262 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 112ms · UTC 11:27 · PVG 19:27 · LAX 04:27 · JFK 07:27
    ♥ Do have faith in what you're doing.