同步和异步

同步和异步

假设你有两个任务,任务A和B:A先执行,B后执行。
同步意味着,当你要执行任务B的时候,你必须要等到任务A执行完成,才能执行任务B, 也就是顺序执行。异步意味着,你执行A一段时间以后,但是还没有结束,你可以先执行任务B。

注意点

技术上讲,同步/异步的概念跟线程其实不相关。尽管,很少有异步的任务在单线程上跑,但是还是有可能的,两个或更多任务在同一线程上异步执行。同步/异步的概念仅仅与,是否有第二个或者接下来的任务能在其他(第一个)任务完成前开始执行,或者它是不是必须等待。其他不管什么线程、进程、CPU,或者实际上的什么硬件都没有关系。

同步/异步的不准确解释:

  1. 同步意味着两个或者多个任务在同一个上下文(线程)运行,所以一个任务或阻塞另一个任务
  2. 同步意味着两个或者多个任务顺序的发生
  3. 异步意味着两个或者多个任务在不同的上下文(线程)运行,所以它们可以并发执行而不会互相阻塞
  4. 异步意味着两个或者多个任务异步地发生
  5. 等等。。。

异步代码可能运行或者可能不运行在同一线程中

同步操作能够顺序地执行,也能够同步执行

异步可能出现情况

  1. 磁盘I/O
  2. 网络请求
  3. DMA(直接内存存取)

链接

  1. Concurrency vs Multi-threading vs Asynchronous Programming : Explained
  2. Stackoverflow: Asynchronous vs synchronous execution
  3. Synchronous vs Asynchronous Under Web-Application
  4. Code Project:What are Actually Synchronous/Asynchronous Operations
  5. O’REILLY Linux System Programming: Synchronized, Synchronous, and Asynchronous Operations
  6. [Programmr:The difference between asynchronous and non-blocking] (http://www.programmr.com/blogs/difference-between-asynchronous-and-non-blocking)
  7. https://www.google.co.id/search?q=asynchronous+programming&safe=active&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjwiaPK6c7VAhVFpI8KHQ7-CWQQ_AUICygC&biw=1680&bih=858#imgrc=TXJCeZEAG_CE-M: