打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单线程 多线程 同步 异步 阻塞 非阻塞 理解与总结

单线程与多线程

当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由一个或多个线程所组成的。

线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等)。线程可以理解为进程中的执行的一段程序片段。

例如——某音频播放程序可以实现一边在显示歌词、一边在显示音频柱、一边在放歌。这就是一个程序下面有多个线程。
在单个程序中同时运行多个线程完成不同的工作,称为多线程,反之为单线程。
生活中的比喻:

单线程:一个人。扫地->做饭->洗衣服

多线程:三个人。A(扫地),B(做饭),C(洗衣服)

 

同步与异步(被调用者而言)、阻塞与非阻塞(调用者而言)

1、同步(sync):

发出一个功能调用时,在没有得到结果之前,该调用就不返回。

2、异步(async):

与同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当这个调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。

对于通知调用者的三种方式,具体如下:

状态:即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。

通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。

回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。

3、阻塞(block):

阻塞调用是指调用结果返回(或者收到通知)之前,当前线程会被挂起,即不继续执行后续操作。

简单来说,等前一件做完了才能做下一件事。

4、非阻塞(non-block):

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

总结:所以所谓同步异步,是对于被调用者而言的;而阻塞非阻塞,则是对调用者而言的。

和刚才一样,打个比喻加深理解:

1、同步阻塞:你打电话给114查路线,在不挂断的情况下,客服帮你查了十分钟之后告诉你,期间你一直在接听电话。

2、同步非阻塞:你打电话给114查路线,在不挂断的情况下,客服帮你查了十分钟之后告诉你,你期间吃了个

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
进程与线程。js是什么运行机制?node.js是什么运行机制?
(3)第一部分:Twisted理论基础
Java多线程初学者指南(1):线程简介 - 哈佛校训 - BlogJava
用一个开源工具实现多线程 Python 程序的可视化 | Linux 中国
事件驱动的详解
程序什么时候应该使用多线程,什么时候单线程效率高。
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服