同步异步、阻塞非阻塞

有关同步异步、阻塞非阻塞的理解,看了很多博客不清楚以下的概括对否,请各位大佬帮忙看看。

同步与异步:
主要阐述任务之间的依赖关系,假设任务A调用任务B,任务A需要等待任务B的完成才能继续执行,这叫同步,而如果任务A调用任务B后立马返回结果,并且在B执行完后会主动通知A,此时成为异步。

阻塞与非阻塞:
主要阐述任务与CPU资源的关系,假设任务A调用任务B,任务A需要等待任务B的完成才能继续执行,此时CPU也还保持任务A所在线程一直等待,这叫阻塞;而如果CPU此时挂起任务A所在线程去执行其他线程,时不时回来询问A是否阻塞完毕,完毕才有可能执行线程A,这叫非阻塞

不知道这样理解有没有偏差,希望各位指点一下

阅读 2.4k
2 个回答

没有问题,同步与异步关注的是消息通信机制,所谓同步,就是在调用者发出一个“调用”,在得到返回结果之前,该“调用”就不返回,一旦调用返回,就是得到了结果。异步是指调用者在发出“调用”之后,不必等到调用结果就可以直接返回。得到调用结果后由被调用者通知调用者

阻塞与非阻塞关注的是程序在等待调用结果时的状态。
阻塞调用是指调用者在结果返回之前,当前线程会被挂起,会一直等到结果的返回。
非阻塞调用值在不能立刻得到结果时,不阻塞当前进程。

同步阻塞、同步非阻塞、异步非阻塞是网络模型里面的概念,楼主可以找这类似的博客看下:https://www.cnblogs.com/aspir... 这个是我当时学习看的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题