在我们理解其他概念之前,我们必须首先了解该过程的几个状态。在程序执行期间,由于操作系统控制算法,程序将进入几种状态:就绪,运行和阻塞。
就绪状态:当进程被分配给除CPU之外的所有必要资源时,可以在获得处理器后立即执行。此时的进程状态称为就绪状态。
执行/执行状态当进程获得处理器时,其程序在处理器上运行,此时的进程状态称为执行状态。
在阻塞状态下运行的进程是阻塞状态,因为它期望事件发生并且无法执行。有几个事件导致进程崩溃,例如,等待I/O完成,应用程序缓冲区不满意,等待字母(信号)等。
Python的基本知识:同步非阻塞异步阻塞。
第二,同步和异步。
同步是一个任务完成取决于另一个任务,只有在等待任务完成后,才能完成从属任务,这是一个可靠的任务序列。成功是成功,失败失败,两个任务的状态可以保持一致。
异步调用不需要等待任务完成,只是为了通知从属任务完成作业,只要完成的任务完成,依赖任务也会立即执行。至于您信任的任务是否真正完成,依赖于它的任务无法确定,因此它是一个不可靠的任务序列。
2.1例子
例如,如果我去银行开展业务,可以有两种方式:
第一种:选择排队等候;
第二种类型:我选择用我的号码记下一小笔。当我到达这个号码时,我会告诉柜台的人,轮到我审查这项业务了。
第一种:前一种(在线等待)同步等待消息通知,即我一直在等待银行经营业务;
第二种:最后一种(等待某人通知他)异步等待消息通知。在异步消息处理中,等待消息通知程序(在这种情况下,等待业务的人)经常注册由激活机制激活的回调机制(此处为计数器的人)等待事件激活时。机制(这里是写在小音符上的数字,尖叫的数字)找到等待事件的人。
第三,阻塞和非阻塞。
阻塞和非阻塞这两个概念与程序(线程)等待消息通知时的状态有关(无论是同步还是异步)。也就是说,阻塞和非阻塞主要是等待消息通知的程序(线程)的状态。
3.1例子
继续前面的例子,无论是在队列中还是使用数字来等待通知,如果在这个等待过程中,服务员只能等待消息的通知,那么机制被锁定,在程序中,它也是也就是说,程序在函数调用中崩溃并且无法继续运行。相反,有些人喜欢在等待银行处理这些服务时打电话和发短信。这个州没有阻止,因为他(服务员)不会阻止通知,但他确实如此。等待一方的事情。
注意:同步同步阻塞效率非常低。想象一下,你必须抬头看看下面的团队是否由你决定。如果将呼叫和观察队列的位置视为两个程序操作,则程序需要在两个不同的行为之间交替,可以想象效率低;没有阻塞的异步表单不存在这样的问题,因为调用是您的事情(服务员),并且当通知您它是计数器(消息激活机制)时,程序不会在两个不同的操作之间交替。
第四,同步/异步和阻塞/非阻塞
4.1同步阻塞形式
效率最低。以上面的例子为例,您专注于排队而不做其他任何事情。
4.2异步阻塞表单。
如果在银行等待业务的人正在使用异步方式等待消息(通知)被激活,也就是说,要获得一个小笔记,如果他们在此期间无法离开银行做其他事情,所以显然,这个人在等待操作中受阻。
可以阻止异步操作,但在处理消息时不会阻止它们,但在等待消息通知时会阻止它们。
4.3没有同步阻塞的形状。
它实际上效率低下。
想象一下,在手机上,你仍应该抬头看看下面的设备是否适合你。如果您将调用位置和观察队列视为两个程序操作,则此程序必须具有这两种不同的行为。从一边到另一边,你可以想象效率很低。
4.4非阻塞异步形式。
效率更高,
因为调用是您的事(服务员)并通知您它是计数器(消息激活机制),所以程序不会在两个不同的操作之间切换。
例如,这个人突然发现自己犯了吸烟罪,不得不出去吸烟,所以他告诉大堂经理说,当他担心不叫这个号码时,他就不会被阻止待机操作当然,上面是异步+非阻塞形式。
许多人会将同步与阻塞混淆,因为很多时候同步会以阻塞的形式出现。类似地,许多人会混淆异步和非阻塞,因为异步操作通常不在真实的I/O操作中执行。锁定