Падзея На аснове == Асінхронны?

Ці з'яўляецца «падзея на аснове» такі ж, як «асінхронны»?

4

3 адказы

Не, гэта не азначае, што падзеі з'яўляюцца асінхроннымі.

У кіраваных падзеямі однотридовой сістэмы, вы можаце запускаць падзеі, але ўсе яны апрацоўваюцца паслядоўна. Яны могуць даць як частка іх апрацоўкі, але нічога не адбываецца адначасова , калі яны даюць, яны спыняюць апрацоўку і чакаць, пакуль яны не будуць зноў абменьваліся паведамленнямі і зноў пачаць апрацоўку.

Прыкладамі гэтага з'яўляюцца Арэлі (Java), Twisted (Python), Node.js (JavaScript), EventMachine (Ruby)

Усе гэтыя прыклады з'яўляюцца завесы падзейна паведамлення, але ўсе яны однопоточные, кожная падзея будзе блакаваць усе наступныя падзеі ў тым жа струмені.

У праграмаванні, асінхронныя падзеі тых, якія адбыліся незалежна ад асноўнага патоку праграмы. Асінхронныя дзеянні з'яўляюцца дзеянні, якія выконваюцца ў схеме без блакавання, што дазваляе асноўны паток праграмы, каб працягнуць апрацоўку.

So just because something is event driven doesn't make it asynchronous, and just because something is asynchronous doesn't make it event driven either; much less concurrent.

9
дададзена
@nickb з першай старонкі Node.js «Вузел аналагічны па канструкцыі і пад уплывам сістэм, такія як машыны падзей у ruby або Python скрывіўся.» і «А як наконт шматпрацэсарнай паралельнасці? Ці не з'яўляюцца тэмамі неабходна адкалібраваць праграмы для шмат'ядравых кампутараў? Вы не можаце ствараць новыя працэсы з дапамогай child_process.fork() гэтыя іншыя працэсы будуць планавацца паралельна.»
дададзена аўтар feeling unwelcome, крыніца
Я думаў, што Node.js фактычна з'яўляецца асінхронным.
дададзена аўтар nickb, крыніца

Яны, па сутнасці артаганальнай паняцці.

« падзейная " па сутнасці азначае, што код, звязаны з пэўнымі выклікамі функцый звязваюцца падчас выканання (і можа змяняцца з дапамогай выканання). Хто «пажары» падзея не ведае, што будзе апрацоўваць яго, і хто апрацоўваць падзея вызначаецца як рэагаваць на падзею праз асацыяцыю, пэўную падчас выканання праграмы. Як правіла, хоць паказальнікі на функцыі, спасылка або паказальнікі на аб'ект правядзення віртуальных метадаў і г.д.)

« Асінхронны » азначае, што струмень праграмы не павінен чакаць выкліку будзе выкананы да прайсці больш (у асноўным ажыццяўляецца з выклікам, які вяртае адразу пасля дэлегавання выканання ў іншы паток або працэс)

Не ўсе падзеі з'яўляюцца асінхроннымі (думаю, да вокнаў SendMessage , павага да PostMessage ), а не ўсіх асінхронных выклікаў неабходныя рэалізаваны «падзеі» (хоць выкарыстанне падзеі механізм даволі часта для выканання асінхронных выклікаў)

3
дададзена

Адно з значэнняў асінхроннага з'яўляецца тое, што ў пункце, дзе вы выпускаюць вылічэнні, не чакаючы адказу, але вы атрымаеце адказ пазней. Адказ прыходзіць у артаганальнай да вас нармальны паток кіравання.

Адным са спосабаў, адказ прыходзіць выкарыстоўваюць падзея: яны адбываюцца спантанна і ў гэтым выпадку, без вашага кода запуску іх. У апрацоўшчыку можна апрацаваць вынік.

У той час як вылічэнне і адказ звязаны кропкай ў патоку кіравання для сінхроннага рэжыму, вы павінны зрабіць злучэнне самастойна ў асінхронным рэжыме. Напрыклад, за кошт выкарыстання парадкавага нумара або што-то.

0
дададзена