Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Documente similare
Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Laborator 5 - Paradigme de Programare

Laborator 3

Proiectarea Sistemelor Software Complexe

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Paradigme de programare

Paradigme de Programare

Ingineria Sistemelor de Programare

Lucrarea nr

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

PROGRAMARE ORIENTATA PE OBIECTE

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Nr.înregistrare: 88 / Social Media in the Classroom Prof.Cucuianu Marița Colegiul Național,,Neagoe Basarab"Oltenița,jud.Călărași 2.Quizizz E

Microsoft Word _POO_Lab_1_Modificari_v01.htm

A.E.F. - suport laborator nr.3 sem.ii Aplicațe privind utilizarea rețelelor 1D În acest laborator sunt atinse următoarele aspecte: realizarea schițelo

Ingineria Sistemelor de Programare

manual_ARACIS_evaluare_experti_v5

PPSD

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Diapositive 1

Curs 10

GHID PENTRU RESETAREA PAROLEI Informații Generale Din dorința de a facilita procesul de autentificare, chiar dacă nu mai cunoașteti datele necesare, a

Ch

Microsoft Word - versiunea D yy.doc

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

E_d_Informatica_sp_SN_2014_bar_10_LRO

Top

Manual scurt pentru instalare rapida a Accesoriului Wi-Fi 1. Instalare fizica a accesoriului Wi-Fi 2. Intrare in modul AP pentru conectarea la reteaua

manual_ARACIS_evaluare_experti_v4

CABINET MINISTRU

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

PowerPoint Presentation

SUBPROGRAME

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Microsoft Word - 2 ES RO.doc

Manual de utilizare a Sistemului Informațional al Institutului Național al Justiției (SI INJ) intranet.inj.md Ver.2 Manual de utilizare a Sistemului I

Platforma 5. 1 Introducere in MSSQL Introducere Pe parcursul ultimilor ani, se poate observa o cuplare a limbajelor de programare majore cu tipuri de

REVISAL Versiunea: Data release: 15 martie 2016 IMPORTANT! Distribuţia curentă (v6.0.4) a aplicaţiei Revisal conţine nomenclatorul COR ISCO 08 î

Microsoft Word - Istoric Modificari declaratii WM.doc

Microsoft Word - CarteC.doc

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

CURS

A.E.F. - suport laborator nr.7 sem.ii Utilizarea rețelelor de tip 1D & 2D În acest laborator sunt atinse următoarele aspecte: conectarea unui element

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

PowerPoint-Präsentation

Guns N' Roses Video Slots Regulile jocului Guns N' Roses Video Slots este un slot video cu 5 role, 3 rânduri și 20 de linii care conține substituții W

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

Microsoft Word - Algoritmi genetici.docx

Lucrarea 10

Microsoft Word - MANUAL_APP_ROMPOS_V7.docx

Web Social FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 2. Dezvoltarea blogurilor prin intermediul WordPress.com PREZE

Procesarea de imagini folosind programarea paralela. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte l

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

Laborator Depanarea Rutării Inter-VLAN Topologie 2013 Cisco and/or its affiliates. All rights reserved. This document is Cisco Public. Page 1 of 8

Înregistrator de temperatură şi umiditate AX-DT100 Instrucţiuni de utilizare

Microsoft Word - Excel_3.DOC

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Alexandru Ioan Cuza din Iaşi 1.2 Facultatea Facultatea de

Utilizarea îmbinării corespondenței pentru crearea şi imprimarea scrisorilor şi a altor documente Dacă utilizați îmbinarea corespondenței când doriți

PowerPoint Presentation

A.E.F. - suport laborator nr.8 sem.ii Analiza structurală la flambaj În acest laborator sunt atinse următoarele aspecte: modalitatea de analiză la fla

FONDUL SOCIAL EUROPEAN

Microsoft Word - Lucrarea_10_t.doc

Concurs online de informatică Categoria PROGRAMARE Secţiunea 5-6 avansaţi PROBLEMA puncte DANS De 1 Iunie - Ziua Copilului se organizează un spe

Laborator - Configurarea de bază DHCPv4 pe un router Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gateway Ob

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

LABORATOR I

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 6. Vizualizarea statisticilor prin int

Declararea variabilelor

... MANAGER SERVICE UTILAJE - Aplicatie software pentru gestiune service utilaje - MANUALUL UTILIZATORULUI OFERTE Folositi acest meniu daca dori

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Addendum Syllabus 6 Microsoft Access 2016 REF Syllabus 6.0 Cunoașterea domeniilor în care se utilizează bazele de date Datorită potenţialului ma

Ghid de instalare ebook Pentru a accesa ebook-ul trebuie să creați un cont pe raftul de cărți VitalSource (Bookshelf account) iar apoi să introduceți

Școala: Clasa a V-a Nr. ore pe săptămână: 4 Profesor: MATEMATICĂ Clasa a V-a Aviz director PLANIFICARE CALENDARISTICĂ ORIENTATIVĂ Nr. crt. Unitatea de

Update firmware aparat foto Mac Mulţumim că aţi ales un produs Nikon. Acest ghid descrie cum să efectuaţi acest update de firmware. Dacă nu aveţi încr

proiectarea bazelor de date

Utilizarea Internetului in Afaceri FSEGA, UBB Lect.univ.dr. Daniel Mican LABORATOR 3. Achizitionarea domeniilor web si a

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Informatică aplicată TEST GRILA TEST GRILĂ - REZOLVAT 1.Structura de principiu a unui sistem de calcul contine urmatoarele componente principale: A. u

Instructiuni pt. depunerea declaratiei A4200 Declaratia A4200 se construieste pornind de la o colectie de fisiere XML, reprezentand fiecare o zi fisca

MANUAL ULTRA ORIENTEERING CLASAMENTE SOFTWARE VERSION 1.0

1

C++ Probleme

Microsoft Word - barcan.doc

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Print

PowerPoint Presentation

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Microsoft Word - Plus TV Analog Pro Stick Installation _Rom V1.3_.doc

Regulile jocului Hotline Hotline este un slot video cu 5 role, 3 rânduri și 30 de linii (fixe) care conține simboluri Wild și Expanding Wild, Re-Spins

Manual de utilizare Aplicatie Proiector I. Pornire/Oprire proiectie Pentru a porni/opri proiectia aveti 3 posibilitati: 1) Pentru pornirea proiectiei

Calcul Numeric

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Transcriere:

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând corutinele în Kotlin este bine să se realizeze următorii pași. 1. se lansează procedura de update a mediului de dezvoltare până când nu mai sunt actualizări de aplicat 2. Crearea unui proiect gol pentru a utiliza corutinele. După cum am discutat și la curs Kotlin folosește o bibliotecă separată pentru a avea abilități specifice calcului paralel. Pentru aceasta ea trebuie introdusă explicit în configurarea unui proiect. Se va verifica ca Internetul să fie conectat. Vom porni de la un proiect nou de gradle cu țintă JVM Kotlin după cum se observă din figura următoare: apoi specificăm numele acestuia (de exemplu: test laborator corutine nr 1) În continuare se dă next până se începe inițializarea propriu-zisă a proiectului. Mediul de dezvoltare va efectual (dacă este cazul) la început o serie de descărcări de pachete precum și configurări automate ale acestora deci în funcție de performanțele sistemului acesta pas poate avea o durată de timp variabilă. După ce acest proces s-a terminat trebuie creat un fișier sursă gol pentru programul nostru acesta va fi creat conform capturii de mai jos.

Se configurează gradle și se trece la scrierea codului specific corutinelor. După ce s-a scris codul va duceți în stânga (zona proiect) și faceți click dreapta pe fișierul Kotlin și selectăm lansarea în execuție. Profilul de execuție va fi creat automat. Problema 1: Este un exemplu din curs și pune mai clar în evidență problemele specifice lipsei măsurilor necesare pentru asigurarea coerenței datelor. import kotlinx.coroutines.* import kotlin.system.* suspend fun CoroutineScope.massiveRun(action: suspend () -> Unit) { val n = 100 val k = 1000 val time = measuretimemillis { val jobs = List(n) { launch { repeat(k) { action() jobs.foreach { it.join() println("s-au efectuat ${n * k operatii in $time ms")

val mtcontext = newfixedthreadpoolcontext(2, "mtpool") var counter = 0 fun main() = runblocking<unit> { CoroutineScope(mtContext).massiveRun { counter++ //variabila comuna unde vor aparea erori println("numarator = $counter") Va trebui să căutați o manieră de rezolvare/evitare a apariției erorilor în respectivul cod. De asemenea problema va trebui modificată astfel încât să se genereze un set de valori care să fie depus întâi într-un ADT și apoi rezultatul să fie scris în mod concurent într-un fișier pe disc. Problema 2 Se pornește de la un exemplu cu actori (discutat la curs) care reprezintă entitate creata prin combinarea unei corutine, o stare care este izolată în interiorul acestei corutine și un canal de comunicație cu alte subrutine care este prezentat mai jos: import kotlinx.coroutines.* import kotlin.system.* import kotlinx.coroutines.channels.* sealed class ContorMsg object IncContor : ContorMsg() class GetContor(val response: CompletableDeferred<Int>) : ContorMsg() fun CoroutineScope.counterActor() = actor<contormsg> { var contor = 0 for (msg in channel) { when (msg) { is IncContor -> contor++ is GetContor -> msg.response.complete(contor) suspend fun CoroutineScope.massiveRun(action: suspend () -> Unit) { val n = 100 val k = 1000 val timp = measuretimemillis { val jobs = List(n) { launch { repeat(k) { action() jobs.foreach { it.join() println("am terminat atatea ${n * k actiuni in $timp ms") fun main() = runblocking<unit> { val contor = counteractor() GlobalScope.massiveRun() {

contor.send(inccontor) println(contor.onsend) val raspons = CompletableDeferred<Int>() contor.send(getcontor(raspons)) println("contor = ${raspons.await()") contor.close() Reluați problema de la prima problemă de data aceasta utilizând abordarea cu actori. Problema 3: În această problemă (discutată și la curs) se prezintă maniera de utilizare a thread-urilor din Java. fun main(args: Array<String>){ object : Thread() { override fun run() { println("sunt in thread-ul singleton ${Thread.currentThread()").start() val t1=simplethread() t1.run() val t2=simplerunnable() t2.run() val thread = Thread { println("thread lambda ${Thread.currentThread() s-a executat.") thread.start() class SimpleThread: Thread() { public override fun run() { println("instanta clasei derivate din Thread ${Thread.currentThread() s-a executat.") class SimpleRunnable: Runnable { public override fun run() { println("instanta clasei care implementeaza Runnable ${Thread.currentThread() s-a executat.") Pornind de la această problemă să se completeze/modifice codul de mai jos care utilizează modelul Singleton pentru a implementa explicit un semafor. Apoi se va va utiliza pentru a executa un acces thread safe multiplu la un fișier de date. Apoi să se reia implementarea cu corutine. Trebuie menționat ca acest exemplu are doar o utilitate didactică fiind redundant deoarece și thread-urile și corutinele au mecanisme specifice mult mai eficiente pentru gestionarea problemei. class Log private constructor(){ companion object { val instance = Log()

val fname = "Semafor.txt" fun Write(line : String) { File(fname).appendText(line) fun Reset(){ File(fname).delete() class Semafor private constructor(){ fun Enter() : Boolean{ fun Exit() { Temă pe acasă (se va implementa atât cu corutine cât și cu apeluri de thread-uri Java) 1. Sa se realizeze o procesare după modelul pipeline a unui ADT întregi. Primul thread din pipe înmulțește toate elementele din vectorul V cu o constantă alpha, următorul thread din pipe va ordona mulțimea iar final ultimul thread o va afișa 2. Să se realizeze calculul simultan pentru patru valori diferite a lui n luate dintr-o coadă de către patru corutine diferite 3. Să se modifice algoritmul din problema 3 astfel încât să poată procesa mai multe fișiere simultan (se poate folosi pool și actori dacă se dorește )