2

假设我有一个简单的脚本,下面有两个函数。当 callback_func 被调用时,我会假设它只会在单一的基础上运行。也就是说,不会有两个事件同时通过代码块。那是对的吗?此外,如果 callback_func 以单一方式运行,则消息传递服务本身必须执行一些缓冲,因此不会丢失任何消息,并且该缓冲取决于发起事件的服务。这也是正确的吗?

def callback_func(event):
    # Can be called anytime

def main_func():
    # Sets up a connection to a messaging service

那么如果我添加一个 send_func 呢?如果我收到一条消息但我有三个出去,send_func如果在发送消息时被调用,将如何处理?Python解释器是否处理了这种情况?

def send_func(event):
    # Can be called anytime

def callback_func(event):
    # Can be called anytime

def main_func():
    # Sets up a connection to a messaging service

最后,如果我将语言更改为 C,上述问题的答案将如何变化?

4

2 回答 2

3

混淆两个概念(异步!=并发)

异步并不意味着并发并发也不意味着异步。初学者(和一些专家)在语义上会混淆这些术语,但它们是不同的概念!

你可以有一个没有另一个,或者有时两者兼而有之。

异步意味着您不等待某事,这并不意味着它会在其他事情发生时发生,只是它可能会在以后发生。

并发意味着不止一件完全独立的事情在同一时间发生,这些事情可以是同步的,同时又是隔离和并发的。

具体实施

CPython是单线程的,不用担心重新进入。其他 Python 运行时允许并发,如果使用这些功能,则需要锁定机制。

C 本质上也是单线程的,除非您专门启动新线程,否则您将需要一个锁定机制。

于 2012-06-13T02:33:58.933 回答
0

我想补充一点,除了“服务”之外,还有很多地方可以发生消息缓冲。在低级别,我相信操作系统会在套接字上缓冲传入和传出字节。

于 2012-06-13T02:38:41.707 回答