2

以下の2つの関数を持つ単純なスクリプトがあるとしましょう。callback_funcが呼び出されると、単一ベースでのみ実行されると思います。つまり、コードブロックを同時に通過する2つのイベントはありません。あれは正しいですか?また、callback_funcが単一ベースで実行される場合、メッセージが失われないように、メッセージングサービス自体が何らかのバッファリングを実行する必要があり、そのバッファリングはイベントを発生させるサービスに依存します。それも正しいですか?

def callback_func(event):
    # Can be called anytime

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

次に、send_funcを追加するとどうなりますか?メッセージを1つ受信したのに、外出が3つ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

混同する 2 つの概念 (非同期 != 同時実行)

AsynchronousConcurrentを意味するものではなく、ConcurrentはAsynchronousを意味するものでもありません。これらの用語は、初心者 (および一部の専門家) によって意味的に混乱しますが、異なる概念です!

一方を他方なしで使用することも、場合によっては両方を使用することもできます。

非同期とは、何かを待たないことを意味します。他のことが行われている間にそれが発生することを意味するのではなく、後で発生する可能性があるということです..

同時性とは、複数の完全に個別のことがまったく同時に発生していることを意味します。これらのことは、分離して並行しながら同期することができます。

実装固有

CPythonはシングル スレッドであり、再エントリの心配はありません。他の Python ランタイムでは同時実行が可能であり、これらの機能を使用する場合はロック メカニズムが必要になります。

C は、特に新しいスレッドを開始しない限り、本質的にシングル スレッドでもあります。その場合は、ロック メカニズムが必要になります。

于 2012-06-13T02:33:58.933 に答える
0

「サービス」以外にも、メッセージのバッファリングが発生する可能性がある場所がたくさんあることを付け加えたいと思います。低レベルでは、オペレーティング システムはソケットの着信および発信バイトをバッファリングすると思います。

于 2012-06-13T02:38:41.707 に答える