异步与同步执行,它的真正含义是什么?
异步和同步执行有什么区别?
当您同步执行某些操作时,您需要等待它完成后才能继续执行其他任务。 当您异步执行某些操作时,可以在完成之前转到其他任务。
也就是说,在计算机环境中,这转化为在另一个“线程”上执行进程或任务。 线程是一系列作为工作单元存在的命令(一段代码)。 操作系统可以管理多个线程,并在切换到另一个线程之前为其分配一个处理器时间片(“片”),以便轮到做一些工作。 在其核心(赦免双关语)中,处理器可以简单地执行一个命令,它没有同时做两件事的概念。 操作系统通过为不同线程分配时间片来模拟这一点。
现在,如果您将多核/处理器引入混合中,那么事实上可以同时发生。 操作系统可以为第一个处理器上的一个线程分配时间,然后将同一时间块分配给另一个处理器上的另一个线程。 所有这些都是为了允许操作系统管理完成任务,同时继续执行代码并执行其他操作。
异步编程是一个复杂的话题,因为当你可以同时做它们时,它们是如何相互联系的。 关于这个问题有很多文章和书籍; 看一看!
同步/异步无法使用多线程。
同步或同步意味着以某种方式“连接”或“依赖”。 换句话说,两个同步任务必须相互了解,并且一个任务必须以某种方式执行,而另一个任务依赖于另一个任务,例如等待直到另一个任务完成。
异步意味着它们是完全独立的,无论是在启动阶段还是在执行阶段,都不能以任何方式考虑另一方。
同步(一个线程):
1 thread -> |<---A---->||<----B---------->||<------C----->|
同步(多线程):
thread A -> |<---A---->|
thread B ------------> ->|<----B---------->|
thread C ----------------------------------> ->|<------C----->|
异步(一个线程):
A-Start ------------------------------------------ A-End
| B-Start -----------------------------------------|--- B-End
| | C-Start ------------------- C-End | |
| | | | | |
V V V V V V
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->|
异步(多线程):
thread A -> |<---A---->|
thread B -----> |<----B---------->|
thread C ---------> |<------C--------->|
<
, >
字符表示的任务A,B,C的起点和终点。 |
从技术上讲,同步/异步的概念实际上与线程没有任何关系 。 尽管通常在同一个线程上运行异步任务是很不寻常的,但是有可能(见下面的例子),通常在单独的线程上同时执行两个或多个任务。不,概念的同步/异步只能在第二个或后续任务能否在另一个(第一个)任务完成之前启动,或者是否必须等待。 就这些。 什么线程(或多个线程)或进程或CPU,或者甚至是什么硬件,执行的任务是不相关的。 的确,为了表达这一点,我编辑了图形来展示这一点。
异步的例子。 在解决许多工程问题时,软件被设计为将整体问题分解为多个单独的任务,然后异步执行它们。 反转矩阵或有限元分析问题就是很好的例子。 在计算中,对列表进行排序就是一个例子。 例如,快速排序例程将列表分割成两个列表,并通过递归调用来对它们进行排序。 在上述两个例子中,这两个任务可以(并且经常)异步执行。 他们不需要分开的线程。 即使是只有一个CPU的机器,只有一个执行线程也可以编码,以在第一个任务完成之前启动第二个任务的处理。 唯一的标准是一项任务的结果不需要作为其他任务的输入。 只要任务的开始和结束时间重叠(只要两者中的任何一个的输出都不需要作为另一个的输入),它们就会被异步执行,无论使用多少个线程。
同步例子。 任何由多个任务组成的任务,其中任务必须按顺序执行,但必须在另一台机器上执行(获取和/或更新数据,从金融服务获取股票报价等)。 如果它在单独的机器上,则它位于单独的线程上,无论是同步还是异步。
简单来说:
同步
你在队列中获得电影票。 直到你面前的每个人都得到一个,你才能得到一个,对于排在你后面的人也是如此。
异步
你和其他许多人在一家餐馆里。 你点你的食物。 其他人也可以点他们的食物,他们不需要等待你的食物煮熟并送达给你,然后才能点餐。 在厨房餐厅工作人员不断烹饪,服务和接受订单。 人们一煮熟就会得到食物。
链接地址: http://www.djcxy.com/p/8967.html上一篇: Asynchronous vs synchronous execution, what does it really mean?