Skip to content

egorkuzn/kotlin-dsl-pipeline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

72 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

kotlin-dsl-pipeline

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° создаСтся:

  • core framework для опрСдСлСния ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык (DSL);
  • picture-pipelines рСализация модСльной Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ;

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ (workflow) прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² (pipe) ΠΈ ΡƒΠ·Π»ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (node).

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (pipe) - это Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ интСрфСйс:

  • Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;
  • Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта;

Π£Π·Π΅Π» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (node) - это Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ добавлСния элСмСнтов Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹.

БостояниС (контСкст) ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° - это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ состояний ΡƒΠ·Π»ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ². Π—Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΡƒΡŽ контСкст стоит ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΡƒΡŽ состояния ΡƒΠ·Π»ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².

БостояниС ΡƒΠ·Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ - это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², находящиСся Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡƒΠ·Π»Π΅.

БостояниС Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° - это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² хранящихся Π² ΠΊΠ°Π½Π°Π»Π΅.

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… состояниях:

БостояниС ОписаниС
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ состояниС созданного ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, ΠΊΠΎΠ³Π΄Π° происходят инициализация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², исходя ΠΈΠ· описанного ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ DSL Π΅Π³ΠΎ остановкС.
Π’ Ρ€Π°Π±ΠΎΡ‚Π΅ БостояниС Π½Π°ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π΅ ΠΏΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚ нСзависимоС Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° исполнСниС ΡƒΠ·Π»ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ².
Π’ зависании БостояниС Π½Π°ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π΅, ΠΊΠΎΠ³Π΄Π° Π·Π° мСньшС Ρ‡Π΅ΠΌ N количСство ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ состояний ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ состояниС.
Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ Π”Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ΅ состояниС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΅Π³ΠΎ остановкС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ВрСбования

Базовая Ρ‡Π°ΡΡ‚ΡŒ

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ОписаниС
Π£Π·Π»Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°Π±ΠΎΡ€Ρ‹ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ трСбования планируСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ 3 Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
Компоновка ΡƒΠ·Π»ΠΎΠ² ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² поддаСтся статичСскому ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ НСт возмоТности Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΡƒΠ·Π»ΠΎΠ² Π½Π° этапС написания ΠΊΠΎΠ΄Π°
НСзависимоС исполнонСниС ΡƒΠ·Π»ΠΎΠ² ИсполнСниС ΡƒΠ·Π»ΠΎΠ² Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… с использованиСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ»Π° систСмных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ОписаниС
ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ части ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ трСбования планируСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ 3 Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² Π³Ρ€Π°Ρ„Π΅ Π’Ρ‹Π²ΠΎΠ΄ прСдупрСТдСния Β ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° зависаний ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Выброс ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, находящийся Π² Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС зависания

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° DSL

Workflow

ΠšΠΎΡ€Π½Π΅Π²ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ слово, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния частСй ΠΊΠΎΠ½Π²Π΅Π΅Ρ€Π° ΠΈ ΠΈΡ… взаимосвязСй

Workflow(
	dispatcher: CoroutineDispatcher,
	countStackContext: Int,
	enableSecurityDeadLock: Bool,
	enabledWarringCyclePipe: Bool,
	updateContext: (Workflow.Context)-> Unit) {
// Π‘Π±ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π² контСкстС WorkflowBuilder
}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Названия Π’ΠΈΠΏ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ НазначСниС
dispatcher CoroutineDispatcher CoroutineDispatcher.Default ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт контСкст Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² - ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСзависимо ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡƒΠ·Π»Ρ‹ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.
countStackContext Int 10 ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ количСство хранящиСся Π² стСкС состояний.
enableSecurityDeadLock Bool false ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° состояния зависания ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. ΠŸΡ€ΠΈ выявлСнии измСнСния состояния ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
enabledWarringCyclePipe Bool false ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π½Π° этапС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ выявлСнии Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² зависимостях ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ, Π² консоли выводится ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… послСдствиях.
updateContext (Workflow.Context)-> Unit {} Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, вызываСмая ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состоянии ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

sharedWorkflow

Для создания шаблонов ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² (SharedWorkflow) прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π° Π²ΠΎΠ·Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ SharedWorkflow

fun mySharedWorkflow(input: Pipe<Int>, output: Pipe<Int>, firstParam: Int): SharedWorkflow =  
    SharedWorkflow {  
  
        node(  
            name = "ΠŸΡ€ΠΈΠΌΠ΅Ρ€",  
            input = input,  
            output = output  
        ) { comsumer, producer ->  
         // logic 
        }  
    }
node
node(  
    name = "ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΠ΄Π°",  
    input = Pair(pipe1, pipe2),  
    output = Pair(pipe3, pipe4)  
) { consumerPipe1, cosumerPipe2, producerPipe3, producerPipe4 ->  
    // Define the action logic here  
  
    println("Executing action for node 'ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΠ΄Π°'")  
    // e.g., Use producers and consumers as needed  
}
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
Названия Π’ΠΈΠΏ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ НазначСниС
name String НСт НазваниС ΡƒΠ·Π»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ
input Pipe<T> | Pair<T,Q> | Triple<T,Q,S> НСт ВходящиС Π² ΡƒΠ·Π΅Π» Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹
output Pipe<T> | Pair<T,Q> | Triple<T,Q,S> НСт ВыходящиС ΠΈΠ· ΡƒΠ·Π»Π° Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹
ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ΡΡ анонимная функция, Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΊΠ°ΠΊ это ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…) ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ интСрфСйсы для взаимодСйствия с Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

НазваниС НазначСниС
start ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Π’ Ρ€Π°Π±ΠΎΡ‚Π΅
pause ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ останавливаСт исполнСниС ΡƒΠ·Π»ΠΎΠ²
stop ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠ΅Ρ€Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½, очищаСтся котСкст ΡƒΠ·Π»ΠΎΠ² ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ всС ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹

Pipe

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π».

Consumer

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ интСрфСйс для добавлСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΠΊΠ°Π½Π°Π»Π΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
НазваниС НазначСниС
plus Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Consumer Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для созданиС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния сразу ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ²
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ
onListener
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ НазначСниС
action Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ всСх Π·Π°Π½Ρ‡Π΅Π½ΠΈΠΉ
receive
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ НазначСниС
Ѐункция ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ³ΠΎ чтСния

Producer

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ интСрфСйс для добавлСния элСмСнтов Π² ΠΊΠ°Π½Π°Π».

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
НазваниС НазначСниС
plus Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Producer Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для созданиС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния сразу ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ²
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ
commit
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ НазначСниС
value Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΊΠ°Π½Π°Π»

РСализация

SharedFlow

Pipes

Pipes Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Koltin Channel.

Kotlin Channel ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° BlockingQueue. Одно ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ put ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π°Ρ send, Π° вмСсто Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ take ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π°Ρ receive.

Pipeline - это шаблон, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ΄Π½Π° сопрограмма создаСт, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, бСсконСчный, ΠΏΠΎΡ‚ΠΎΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° другая сопрограмма ΠΈΠ»ΠΈ сопрограммы ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ этот ΠΏΠΎΡ‚ΠΎΠΊ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ производят Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

BufferChannel Image BufferChannel with data Image Pipe Image

Π—Π°Π΄Π°Ρ‡Π° с нСзависимым исполнСниСм nodes

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Kotlin ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹.

ΠšΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° β€” это экзСмпляр приостанавливаСмого вычислСния. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π’ дальнСйшСм Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ приостановки Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ связанныС с Π½Π΅ΠΉ вычислСния ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² памяти ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°, позволяя Π΅ΠΌΡƒ свободно Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ.

Π’Ρ‹Π·ΠΎΠ² suspend-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ позволяСт ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия. Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя приостановлСнная функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

КаТдая nodes запускаСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Π΅ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ состояниСм ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹.

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π°

Использовалась Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° editimage

SubtaskImage

Для ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ созданы 6 node

About

Kotlin DSL pipeline

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages