Coroutine (original) (raw)
Koprogramy (anglicky coroutine) jsou v informatice programové komponenty, které umožňují na rozdíl od podprogramů (procedur, funkcí, metod) více vstupních bodů, pozastavení a obnovení výpočtu v jejich různých místech. Koprogramy jsou vhodné pro implementaci kooperativního multitaskingu, iterátorů, proudů (stream) a trubek (pipe). Termín koprogram poprvé použil ve své seminární práci v roce 1963.
Property | Value |
---|---|
dbo:abstract | Koprogramy (anglicky coroutine) jsou v informatice programové komponenty, které umožňují na rozdíl od podprogramů (procedur, funkcí, metod) více vstupních bodů, pozastavení a obnovení výpočtu v jejich různých místech. Koprogramy jsou vhodné pro implementaci kooperativního multitaskingu, iterátorů, proudů (stream) a trubek (pipe). Termín koprogram poprvé použil ve své seminární práci v roce 1963. (cs) Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed. Coroutines are well-suited for implementing familiar program components such as cooperative tasks, exceptions, event loops, iterators, infinite lists and pipes. Melvin Conway coined the term coroutine in 1958 when he applied it to the construction of an assembly program. The first published explanation of the coroutine appeared later, in 1963. (en) In der Informatik sind Koroutinen (auch Coroutinen) eine Verallgemeinerung des Konzepts einer Prozedur oder Funktion. Der prinzipielle Unterschied zwischen Koroutinen und Prozeduren ist, dass Koroutinen ihren Ablauf unterbrechen und später wieder aufnehmen können, wobei sie ihren Status beibehalten. Unter den ältesten Programmiersprachen, die Koroutinen unterstützen, sind Simula oder Modula-2. Auch moderne Sprachen wie Python kennen ähnliche Konzepte. In einigen weit verbreiteten Sprachen wie C oder Java gestaltet sich die Implementierung jedoch schwierig. Der Begriff selbst stammt von Melvin Conway, der ihn 1963 in einer Veröffentlichung über Compilerbau benutzte. Donald Knuth bezeichnet Prozeduren als Spezialfall von Koroutinen. (de) En un programa, una corrutina es una unidad de tratamiento semejante a una subrutina, con la diferencia de que, mientras que la salida de una subrutina pone fin a esta, la salida de una corrutina puede ser el resultado de una suspensión de su tratamiento hasta que se le indique retomar su ejecución (multitarea cooperativa). La suspensión de la corrutina y su reanudación pueden ir acompañadas de una transmisión de datos. Las corrutinas permiten realizar tratamientos basados en algoritmos cooperativos como iteradores, generadores, tuberías, etcétera. Según Donald Knuth, el término corrutina fue inventado por Melvin Conway en 1958, cuando trabajaba en la escritura de un programa en ensamblador. Más tarde, Conway propuso organizar un compilador en un conjunto de corrutinas, lo que trajo la posibilidad de utilizar diferentes rutas durante la depuración y de utilizar una sola estructura en producción. (es) Dans un programme, une coroutine est une unité de traitement qui s'apparente à une routine, à ceci près que, alors que la sortie d'une routine met fin à la routine, la sortie de la coroutine peut être le résultat d'une suspension de son traitement jusqu'à ce qu'il lui soit signalé de reprendre son cours. La suspension de la coroutine et la reprise de son cours peuvent s'accompagner d'une transmission de données. Les coroutines permettent de réaliser des traitements basés sur des algorithmes coopératifs comme les itérateurs, les générateurs, des canaux de communication, etc. D'après Donald Knuth, le terme coroutine fut inventé par Melvin Conway en 1958, alors qu'il travaillait à l'écriture d'un programme assembleur. Plus tard, Conway proposa d'organiser un compilateur en un ensemble de coroutines, ce qui donne la possibilité d'utiliser des chemins différents lors du débogage, et d'utiliser une seule structure en production. (fr) 코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 together를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이라고 생각한다. 어떠한 코루틴이 발동될 때마다 해당 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다. 도널드 커누스에 따르면 는 1958년 코루틴(coroutine)이라는 용어를 만들어냈으며 당시 그는 이를 어셈블리 프로그램에 적용했다. 코루틴에 관해 설명된 최초의 출판물은 1963년에 등장하였다. (ko) コルーチン(英: co-routine)とはプログラミングの構造の一種。サブルーチンがエントリーからリターンまでを一つの処理単位とするのに対し、コルーチンはいったん処理を中断した後、続きから処理を再開できる。接頭辞 co は協調を意味するが、複数のコルーチンが中断・継続により協調動作を行うことによる。 サブルーチンと異なり、状態管理を意識せずに行えるため、協調的処理、イテレータ、無限リスト、パイプなど、継続状況を持つプログラムが容易に記述できる。 コルーチンはサブルーチンを一般化したものと考えられる。コルーチンをサポートする言語には Modula-2、Simula、Icon、Lua、C#、Limbo、Swift などがある。マルチスレッドで原理的には同じことができるため、現在はそちらが使われるケースが多い。これはマルチスレッドであれば直接OSの支援を受けられることや、エントリー/リターンの構造を変えずにコードを多重化できるので、過去の言語との親和性が良いなどが理由である。ただし、マルチスレッドの場合プログラマが同期制御を行わなければならないので、コルーチンのような簡易さはない。 コルーチンという名称は、メルヴィン・コンウェイの1963年の論文に最初の記述がある。 (ja) Pojęcie współprogramu ma dwie odmienne definicje. Obie definicje zgodnie stwierdzają, że współprogram cechuje się posiadaniem ciągu instrukcji do wykonania i ponadto możliwością zawieszania wykonywania jednego współprogramu A i przenoszenia wykonywania do innego współprogramu B. W szczególności można wznowić pracę zawieszonego współprogramu A, a wykonywanie będzie podjęte w miejscu, w którym zostało zawieszone. Tym co różni obie definicje jest zdolność współpracy z rekurencyjnymi procedurami (W językach programowania funkcyjnego koncepcja współprogramu istnieje pod postacią kontynuacji – pojęcia wprowadzonego niemal równocześnie ze współprogramami). Obiekt współprogramu jest quasi-wątkiem. Tak jak wątek ma ciąg instrukcji do wykonania, w odróżnieniu od wątków obiekty współprogramów nie działają równolegle. Jest niezmiennikiem systemu współprogramów to, że w każdej chwili, dokładnie jeden obiekt współprogramu wykonuje swoje instrukcje: W literaturze znaleźć można termin włókno (ang. fiber) dla odróżnienia od wątku (ang.thread). W latach 60 XX wieku współprogram był fragmentem kodu napisanego w assemblerze. wątki o następujących własnościach: * dokładnie jeden współprogram wykonuje swoje instrukcje, tzn. jest aktywny, * współprogram aktywny może przejść w stan pasywny wskazując przy tym na inny wątek, który ma być uaktywniony, * współprogram uaktywniony w efekcie wykonania instrukcji (w dotychczas aktywnym współprogramie ) kontynuuje wykonywanie instrukcji od odpowiedniego punktu wejścia, dokładniej: pierwsze uruchomienie instrukcji wątku współprogramu spowoduje wykonanie pierwszej instrukcji wątku, każda następna instrukcja wznawiająca wykonywanie wątku współprogramu rozpoczyna wykonywanie instrukcji od punktu wejścia wyznaczonego przez ostatnio wykonaną w nim instrukcję (pl) Em ciência da computação, corrotina é um componente de um programa de computador que generaliza subrotinas para permitir múltiplos pontos de entrada e a suspensão e o resumo da execução em determinados pontos do código. Corrotinas são adequadas para a implementação de componentes como multitarefa, iterador, avaliação preguiçosa e canalização. O termo foi originado por em um artigo de 1963. (pt) Сопрограмма (англ. coroutine) — программный модуль, особым образом организованный для обеспечения взаимодействия с другими модулями по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому, тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик. Наряду с (англ. fiber), сопрограммы являются средством обеспечения «легковесной» программной многопоточности в том смысле, что могут быть реализованы без использования механизмов переключений контекста операционной системой. Сопрограммы являются более гибкими и обобщёнными, чем подпрограммы: в сравнении с подпрограммой, имеющей всегда одну входную точку, сопрограмма имеет стартовую точку входа и размещённые внутри последовательность возвратов и следующих за ними точек входа. Подпрограмма может возвращаться только однажды, сопрограмма может возвращать управление несколько раз. Время работы подпрограммы определяется принципом LIFO (последняя вызванная подпрограмма завершается первой), время работы сопрограммы определяется её использованием и необходимостью. Появление понятия сопрограммы относят к конструкции, применённой в 1958 году в практике программирования на языке ассемблера, в 1960-е — 1970-е годы сопрограммы практиковались в некоторых высокоуровневых языках (Клу, Симула, Модула-2), но заметное распространение получили лишь в 2000-е годы, когда появились многочисленные библиотеки поддержки сопрограмм в популярных языках программирования, а в некоторые новые языки (такие как Lua, Ruby, Go, Julia) встроены изначально. Сопрограммы используются для реализации многих похожих компонентов программ, таких как генераторы и итераторы, бесконечные списки с использованием ленивых вычислений, каналы, конечные автоматы внутри одной подпрограммы (где состояние определяется по текущей точке входа и выхода), реализации обработки исключений и модели акторов. (ru) Korutiner är inom datavetenskap programkomponenter som generaliserar subrutiner, för att därigenom tillåta olika ingångspunkter och att pausa och fortsätta körningen på vissa platser. Korutiner kom till som en teknik inom lågnivåspråk, men stöds även i vissa högnivåspråk, exempelvis Simula och Modula-2. Ett exempel på nyttan av korutiner. Om man har ett konsument/producent-förhållande där en rutin skapar objekt och lägger dem i kö, och en annan rutin tar objekt från kön och använder dem, så vill man gärna effektivisera detta genom att lägga till och ta bort flera objekt åt gången. Koden skulle kunna se ut så här: var q := new queuecoroutine produce loop while q is not full create some new items add the items to q yield to consumecoroutine consume loop while q is not empty remove some items from q use the items yield to produce Varje korutin gör så mycket den kan innan den överlämnar kontrollen till den andra, med yield-kommandot. Den andra korutinen kan nu fortsätta där den slutade tidigare, och fortsätta att behandla kön. (sv) Співпрограма або співпроцедура (англ. Coroutine) — компонент програми, що узагальнює поняття підпрограми, додатковою підтримкою безлічі точок входу (а не однієї, як підпрограма) і зупинку та продовження виконання із збереженням певного положення. Співпрограми є гнучкішими і узагальненішими, ніж підпрограми, але рідше використовуються на практиці. Застосування співпрограм, будучи методикою ще асемблера, практикувалося лише деякими високорівневими мовами, наприклад Simula і . Співпрограми добре придатні для реалізації багатьох схожих компонентів програм (ітераторів, нескінченних списків, каналів, спільних завдань). Співпрограма має початкову точку входу і розташовані всередині послідовності повернень і наступних точок входу. Підпрограмма може повертати керування лише одного разу, співпрограма може повертати керування багаторазово. Час роботи підпрограми відзначається принципом LIFO (остання викликана підпрограма завершується першою), час роботи співпрограми визначається її використанням і необхідністю. Наведемо простий приклад використання співпрограми. Нехай необхідно реалізувати зв'язок між споживачем і виробником, де одна частина програми створює елементи й поміщає їх у чергу, а інша видаляє їх та використовує. Наступний код реалізує це: var q := new queue coroutine produce loop while q is not full create some new items add the items to q yield to consume coroutine consume loop while q is not empty remove some items from q use the items yield to produce (uk) 协程(英語:coroutine)是计算机程序的一类组件,推广了协作式多任务的子例程,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。 根据高德纳的说法,马尔文·康威于1958年发明了术语“coroutine”并用于构建汇编程序 ,关于协程的最初解说在1963年发表。 (zh) |
dbo:wikiPageExternalLink | https://metacpan.org/module/Coro http://commons.apache.org/sandbox/commons-javaflow/ http://aleksandar-prokopec.com/resources/docs/soundness-coroutines.pdf http://caliburn.codeplex.com/Wiki/View.aspx%3Ftitle=IResult http://es6-features.org/%23GeneratorFunctionIteratorProtocol http://eventlet.net/ http://liber.sourceforge.net/coroutines.rb http://openjdk.java.net/projects/mlvm/ http://ruby-doc.org/core-2.5.1/Fiber.html http://rubydoc.info/stdlib/core/1.9.2/Fiber http://www.wintellect.com/PowerThreading.aspx https://amphp.org/ https://gist.githubusercontent.com/98-f355-f1/9929888ef734a829a6ee670beb88f82e/raw/2dea9bba72a88982ea752da1db13e9d5f2451abb/coroutines.rb https://oatpp.io/benchmark/websocket/5-million/ https://openswoole.com/ https://symplely.github.io/coroutine/ https://tour.dlang.org/tour/en/multithreading/fibers https://www.php.net/manual/en/language.fibers.php http://www.boost.org/doc/libs/1_53_0/libs/context/doc/html/index.html http://www.boost.org/doc/libs/1_55_0/libs/context/doc/html/index.html http://www.boost.org/doc/libs/1_57_0/libs/coroutine/doc/html/index.html http://www.boost.org/doc/libs/1_61_0/libs/coroutine2/doc/html/index.html http://www.softpanorama.org/Lang/coroutines.shtml http://www.stackless.com/ https://oatpp.io/docs/oatpp-coroutines/ http://boost.org http://www.boost.org http://www.gevent.org https://kotlinlang.org http://msdn.microsoft.com/en-us/library/dscyy5s0(VS.80).aspx https://archive.is/20130119150506/http:/caliburn.codeplex.com/Wiki/View.aspx%3Ftitle=IResult https://github.com/Kotlin/kotlinx.coroutines https://github.com/MindTouch/dream https://github.com/async-rs/async-std https://github.com/belozierov/SwiftCoroutine https://github.com/facebook/hiphop-php https://github.com/fibjs/fibjs https://github.com/infinit/elle https://github.com/jamboree/co2 https://github.com/laverdet/node-fibers https://github.com/leonoel/cloroutine https://github.com/michaelmeling/StreamThreads https://github.com/mozy/mordor https://github.com/oatpp/oatpp https://github.com/offbynull/coroutines https://github.com/python-greenlet/greenlet https://github.com/scummvm/scummvm/blob/master/common/coroutines.h https://github.com/symplely/coroutine/tree/master/examples https://github.com/tokio-rs/tokio https://github.com/tonbit/coroutine https://github.com/yevhen/Servelat-Pieces https://web.archive.org/web/20100324183723/http:/wintellect.com/PowerThreading.aspx https://www.researchgate.net/publication/326548610_Theory_and_Practice_of_Coroutines_with_Snapshots http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html https://metacpan.org/pod/Coro http://code.google.com/p/coroutines/ https://www.python.org/dev/peps/pep-0342/ https://www.python.org/dev/peps/pep-0380/ https://www.python.org/dev/peps/pep-0492/ https://www.python.org/dev/peps/pep-3156/ |
dbo:wikiPageID | 243800 (xsd:integer) |
dbo:wikiPageLength | 43995 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID | 1124323027 (xsd:integer) |
dbo:wikiPageWikiLink | dbr:Preemptive_multitasking dbr:Processor_register dbr:Prolog dbr:Python_(programming_language) dbr:Ruby_(programming_language) dbr:Sather dbr:Scala_(programming_language) dbr:Scheme_(programming_language) dbr:Hard_realtime dbr:Melvin_Conway dbr:Tail_call dbr:Application_binary_interface dbr:Julia_(programming_language) dbr:Unity_(game_engine) dbr:Urbiscript dbr:VAX dbr:VAX_MACRO dbr:Vala_(programming_language) dbr:Duff's_device dbr:Preprocessor dbr:Protothread dbr:.NET_Framework dbr:Common_Language_Runtime dbr:Computer_multitasking dbr:Rust_(programming_language) dbr:Generator_(computer_programming) dbr:ChucK dbr:Clang dbr:Clojure dbr:Closure_(computer_science) dbr:Go_(programming_language) dbr:Godot_(game_engine) dbr:Modula-2 dbr:Mono_(software) dbr:Motorola_6809 dbr:Concurrency_(computer_science) dbr:Context_switch dbr:Continuation dbr:Cooperative_multitasking dbr:System_calls dbr:Tail_call_elimination dbr:AngelScript dbr:Limbo_(programming_language) dbr:Lua_(programming_language) dbr:MACRO-11 dbr:Call_stack dbr:Simon_Tatham dbr:Simula dbr:Single_Unix_Specification dbr:Smalltalk dbr:Stack_pointer dbr:Stackless_Python dbr:Stream_(computing) dbr:Subroutine dbr:Clobbering dbr:Communicating_sequential_processes dbr:Computer_program dbr:Parallel_computing dbr:Pipeline_(Unix) dbr:Pipeline_(software) dbr:Program_counter dbr:Static_variable dbr:Mutual_recursion dbr:BCPL dbr:BETA_(programming_language) dbr:BLISS dbr:Ballerina_(programming_language) dbr:C++ dbr:C++20 dbr:CLU_(programming_language) dbr:C_(programming_language) dbr:C_Sharp_(programming_language) dbc:Concurrent_computing dbc:Subroutines dbr:Tom_Duff dbr:Trampoline_(computing) dbr:Turbo_Pascal dbr:GameMonkey_Script dbr:Lazy_evaluation dbr:Lock_(computer_science) dbr:ASSIST_(computing) dbr:Actor_model dbr:D_(programming_language) dbr:Erlang_(programming_language) dbr:Event-driven_programming dbr:Exception_handling dbr:F_Sharp_(programming_language) dbr:Factor_(programming_language) dbr:Niklaus_Wirth dbr:PDP-11 dbr:PHP dbr:POSIX dbr:Pascal_(programming_language) dbr:Goto dbr:Iterator dbr:Video_game dbr:Haskell_(programming_language) dbr:High_Level_Assembly dbr:Async/await dbr:Asynchronous_I/O dbr:Io_(programming_language) dbr:JavaScript dbr:Java_(programming_language) dbr:Tcl dbr:State_machine dbr:Assembly_language dbr:Chapel_(programming_language) dbr:Blocking_(computing) dbr:SuperCollider dbr:High-level_programming_language dbr:Thread_(computing) dbr:Yield_(multithreading) dbr:Squirrel_(programming_language) dbr:Fiber_(computer_science) dbr:Icon_(programming_language) dbr:Kotlin_(programming_language) dbr:Nemerle dbr:Await dbr:Raku_(programming_language) dbr:ScummVM dbr:Self_(programming_language) dbr:Setcontext dbr:Protothreads dbr:Jeffrey_Richter dbr:Non-preemptive_multitasking dbr:Computed_goto dbr:Lucid_(programming_language) dbr:Event_loop dbr:Mozy dbr:ΜC++ dbr:Switch_statement dbr:Picolisp dbr:Scala.js_(programming_language) dbr:Setjmp/longjmp dbr:Critical_sections dbr:Mutex dbr:Aikido_(programming_language) dbr:Perl_5 dbr:Inline_assembly dbr:C_Sharp_5.0 dbr:Standard_C_library dbr:Dynamic_C dbr:Sigaltstack dbr:Yevhen_Bobrov |
dbp:date | 2010-03-24 (xsd:date) 2013-01-19 (xsd:date) |
dbp:url | https://archive.is/20130119150506/http:/caliburn.codeplex.com/Wiki/View.aspx%3Ftitle=IResult https://web.archive.org/web/20100324183723/http:/wintellect.com/PowerThreading.aspx |
dbp:wikiPageUsesTemplate | dbt:As_of dbt:Authority_control dbt:Citation_needed dbt:Cite_journal dbt:Cleanup_bare_URLs dbt:Div_col dbt:Div_col_end dbt:Further dbt:Main dbt:Primary_source_inline dbt:Reflist dbt:Snd dbt:Webarchive |
dcterms:subject | dbc:Concurrent_computing dbc:Subroutines |
gold:hypernym | dbr:Components |
rdf:type | owl:Thing yago:WikicatSubroutines yago:Abstraction100002137 yago:Code106355894 yago:CodingSystem106353757 yago:Cognition100023271 yago:Communication100033020 yago:Concept105835747 yago:Content105809192 yago:Idea105833840 yago:PsychologicalFeature100023100 yago:Writing106359877 yago:WrittenCommunication106349220 dbo:Organisation yago:Routine106582403 yago:Software106566077 yago:WikicatProgrammingConstructs |
rdfs:comment | Koprogramy (anglicky coroutine) jsou v informatice programové komponenty, které umožňují na rozdíl od podprogramů (procedur, funkcí, metod) více vstupních bodů, pozastavení a obnovení výpočtu v jejich různých místech. Koprogramy jsou vhodné pro implementaci kooperativního multitaskingu, iterátorů, proudů (stream) a trubek (pipe). Termín koprogram poprvé použil ve své seminární práci v roce 1963. (cs) Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed. Coroutines are well-suited for implementing familiar program components such as cooperative tasks, exceptions, event loops, iterators, infinite lists and pipes. Melvin Conway coined the term coroutine in 1958 when he applied it to the construction of an assembly program. The first published explanation of the coroutine appeared later, in 1963. (en) 코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 together를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이라고 생각한다. 어떠한 코루틴이 발동될 때마다 해당 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다. 도널드 커누스에 따르면 는 1958년 코루틴(coroutine)이라는 용어를 만들어냈으며 당시 그는 이를 어셈블리 프로그램에 적용했다. 코루틴에 관해 설명된 최초의 출판물은 1963년에 등장하였다. (ko) コルーチン(英: co-routine)とはプログラミングの構造の一種。サブルーチンがエントリーからリターンまでを一つの処理単位とするのに対し、コルーチンはいったん処理を中断した後、続きから処理を再開できる。接頭辞 co は協調を意味するが、複数のコルーチンが中断・継続により協調動作を行うことによる。 サブルーチンと異なり、状態管理を意識せずに行えるため、協調的処理、イテレータ、無限リスト、パイプなど、継続状況を持つプログラムが容易に記述できる。 コルーチンはサブルーチンを一般化したものと考えられる。コルーチンをサポートする言語には Modula-2、Simula、Icon、Lua、C#、Limbo、Swift などがある。マルチスレッドで原理的には同じことができるため、現在はそちらが使われるケースが多い。これはマルチスレッドであれば直接OSの支援を受けられることや、エントリー/リターンの構造を変えずにコードを多重化できるので、過去の言語との親和性が良いなどが理由である。ただし、マルチスレッドの場合プログラマが同期制御を行わなければならないので、コルーチンのような簡易さはない。 コルーチンという名称は、メルヴィン・コンウェイの1963年の論文に最初の記述がある。 (ja) Em ciência da computação, corrotina é um componente de um programa de computador que generaliza subrotinas para permitir múltiplos pontos de entrada e a suspensão e o resumo da execução em determinados pontos do código. Corrotinas são adequadas para a implementação de componentes como multitarefa, iterador, avaliação preguiçosa e canalização. O termo foi originado por em um artigo de 1963. (pt) 协程(英語:coroutine)是计算机程序的一类组件,推广了协作式多任务的子例程,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。 根据高德纳的说法,马尔文·康威于1958年发明了术语“coroutine”并用于构建汇编程序 ,关于协程的最初解说在1963年发表。 (zh) In der Informatik sind Koroutinen (auch Coroutinen) eine Verallgemeinerung des Konzepts einer Prozedur oder Funktion. Der prinzipielle Unterschied zwischen Koroutinen und Prozeduren ist, dass Koroutinen ihren Ablauf unterbrechen und später wieder aufnehmen können, wobei sie ihren Status beibehalten. (de) En un programa, una corrutina es una unidad de tratamiento semejante a una subrutina, con la diferencia de que, mientras que la salida de una subrutina pone fin a esta, la salida de una corrutina puede ser el resultado de una suspensión de su tratamiento hasta que se le indique retomar su ejecución (multitarea cooperativa). La suspensión de la corrutina y su reanudación pueden ir acompañadas de una transmisión de datos. Las corrutinas permiten realizar tratamientos basados en algoritmos cooperativos como iteradores, generadores, tuberías, etcétera. (es) Dans un programme, une coroutine est une unité de traitement qui s'apparente à une routine, à ceci près que, alors que la sortie d'une routine met fin à la routine, la sortie de la coroutine peut être le résultat d'une suspension de son traitement jusqu'à ce qu'il lui soit signalé de reprendre son cours. La suspension de la coroutine et la reprise de son cours peuvent s'accompagner d'une transmission de données. Les coroutines permettent de réaliser des traitements basés sur des algorithmes coopératifs comme les itérateurs, les générateurs, des canaux de communication, etc. (fr) Pojęcie współprogramu ma dwie odmienne definicje. Obie definicje zgodnie stwierdzają, że współprogram cechuje się posiadaniem ciągu instrukcji do wykonania i ponadto możliwością zawieszania wykonywania jednego współprogramu A i przenoszenia wykonywania do innego współprogramu B. W szczególności można wznowić pracę zawieszonego współprogramu A, a wykonywanie będzie podjęte w miejscu, w którym zostało zawieszone. Tym co różni obie definicje jest zdolność współpracy z rekurencyjnymi procedurami (W językach programowania funkcyjnego koncepcja współprogramu istnieje pod postacią kontynuacji – pojęcia wprowadzonego niemal równocześnie ze współprogramami). (pl) Korutiner är inom datavetenskap programkomponenter som generaliserar subrutiner, för att därigenom tillåta olika ingångspunkter och att pausa och fortsätta körningen på vissa platser. Korutiner kom till som en teknik inom lågnivåspråk, men stöds även i vissa högnivåspråk, exempelvis Simula och Modula-2. var q := new queuecoroutine produce loop while q is not full create some new items add the items to q yield to consumecoroutine consume loop while q is not empty remove some items from q use the items yield to produce (sv) Сопрограмма (англ. coroutine) — программный модуль, особым образом организованный для обеспечения взаимодействия с другими модулями по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому, тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик. Наряду с (англ. fiber), сопрограммы являются средством обеспечения «легковесной» программной многопоточности в том смысле, что могут быть реализованы без использования механизмов переключений контекста операционной системой. (ru) Співпрограма або співпроцедура (англ. Coroutine) — компонент програми, що узагальнює поняття підпрограми, додатковою підтримкою безлічі точок входу (а не однієї, як підпрограма) і зупинку та продовження виконання із збереженням певного положення. Співпрограми є гнучкішими і узагальненішими, ніж підпрограми, але рідше використовуються на практиці. Застосування співпрограм, будучи методикою ще асемблера, практикувалося лише деякими високорівневими мовами, наприклад Simula і . Співпрограми добре придатні для реалізації багатьох схожих компонентів програм (ітераторів, нескінченних списків, каналів, спільних завдань). (uk) |
rdfs:label | Koprogram (cs) Koroutine (de) Corrutina (es) Coroutine (en) Coroutine (fr) 코루틴 (ko) コルーチン (ja) Współprogram (pl) Сопрограмма (ru) Corrotina (pt) Korutin (sv) Співпрограма (uk) 协程 (zh) |
owl:sameAs | freebase:Coroutine yago-res:Coroutine wikidata:Coroutine dbpedia-cs:Coroutine dbpedia-da:Coroutine dbpedia-de:Coroutine dbpedia-es:Coroutine dbpedia-fr:Coroutine dbpedia-ja:Coroutine dbpedia-kk:Coroutine dbpedia-ko:Coroutine dbpedia-pl:Coroutine dbpedia-pt:Coroutine dbpedia-ru:Coroutine dbpedia-sv:Coroutine dbpedia-uk:Coroutine dbpedia-vi:Coroutine dbpedia-zh:Coroutine https://global.dbpedia.org/id/Lzav |
prov:wasDerivedFrom | wikipedia-en:Coroutine?oldid=1124323027&ns=0 |
foaf:isPrimaryTopicOf | wikipedia-en:Coroutine |
is dbo:wikiPageDisambiguates of | dbr:Routine |
is dbo:wikiPageRedirects of | dbr:Comparison_of_programming_languages_(coroutines) dbr:Coroutines dbr:Cothread dbr:Yield_statement dbr:Deterministic_concurrency dbr:Co-routine dbr:Co-routines dbr:Suspended_computation |
is dbo:wikiPageWikiLink of | dbr:C_syntax dbr:Python_(programming_language) dbr:Scheme_(programming_language) dbr:History_of_the_Actor_model dbr:Julia_(programming_language) dbr:Unix dbr:Urbiscript dbr:C++_Standard_Library dbr:Duff's_device dbr:Innovative_Routines_International dbr:Protothread dbr:Comparison_of_programming_languages_(coroutines) dbr:Concurrent_computing dbr:Cooperative_Linux dbr:Coroutines dbr:Generator_(computer_programming) dbr:FreeRTOS dbr:Function_(computer_programming) dbr:Go_(programming_language) dbr:Gray_code dbr:Modula-2 dbr:Modula-2+ dbr:Mono_(software) dbr:Context_switch dbr:Continuation dbr:Control_flow dbr:Lua_(programming_language) dbr:MDL_(programming_language) dbr:MPICH dbr:Call-with-current-continuation dbr:Call_stack dbr:Simula dbr:Smalltalk dbr:Stackless_Python dbr:Standard_Template_Library dbr:Structured_programming dbr:Pipeline_(software) dbr:Programming_language_theory dbr:STREAMS dbr:Microthread dbr:Mutual_recursion dbr:BLISS dbr:C++20 dbr:Torch_(machine_learning) dbr:UIP_(micro_IP) dbr:Western_Digital_WD16 dbr:Futures_and_promises dbr:Cothread dbr:3Delight dbr:Goto dbr:Iterator dbr:List_of_Python_software dbr:Return_statement dbr:Async/await dbr:Asynchronous_I/O dbr:Io_(programming_language) dbr:Tcl dbr:Suspend_and_resume dbr:Eight_queens_puzzle dbr:Jackson_structured_programming dbr:Thread_(computing) dbr:Yield dbr:Yield_(multithreading) dbr:C++23 dbr:PicoLisp dbr:Finalizer dbr:Green_thread dbr:Icon_(programming_language) dbr:Setcontext dbr:Routine dbr:Unicon_(programming_language) dbr:Setjmp.h dbr:The_Art_of_Computer_Programming dbr:Evaluation_strategy dbr:Virtual_threads dbr:Structured_concurrency dbr:Yield_statement dbr:Deterministic_concurrency dbr:Co-routine dbr:Co-routines dbr:Suspended_computation |
is foaf:primaryTopic of | wikipedia-en:Coroutine |