同步 异步 阻塞 非阻塞
区分点:
调用方是否等返回,等返回时候是什么状态?【如果等,等的时候在干什么?】
解析:
-
同步和异步关注的是通信机制。同步是实时处理,比如打电话,通信双方需要不断交互,才能传递信息。同步操作是在发出一个调用时,如果没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值。因此,同步操作是由调用者主动等待这个调用的结果。
-
异步则是分时处理,如收发短信。异步操作在发出之后会直接返回,没有返回结果。异步操作可以避免拥塞,提高程序的效率和性能。
阻塞和非阻塞关注的是程序在等待调用结果时的状态。
阻塞操作是指调用结果返回之前,当前线程会被挂起,只有得到结果之后才会返回。
非阻塞操作则是指在该调用不能立刻得到结果之前,不会阻塞当前线程,可以继续处理后续的操作。
举例:
- 同步操作:程序等待操作完成后再继续执行后续代码。在 Python 中,requests 库的 get 和 post 方法就是典型的同步操作。
- 非阻塞操作:程序在等待操作完成时可以继续执行其他任务。在 Python 中,可以使用 asyncio 库和 aiohttp 库来实现非阻塞的 HTTP 请求。
-
同步非阻塞操作:在同步代码中使用一些机制(如 concurrent.futures)来避免完全阻塞。
-
- 异步非阻塞;await ,async之类,事件循环