Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:cursuri:curs-08 [2017/02/23 16:31]
razvan.deaconescu
so:cursuri:curs-08 [2019/04/10 23:07] (current)
razvan.deaconescu [Utilitate apeluri reentrante]
Line 3: Line 3:
   * [[http://​prezi.com/​3noq9rp6p95k/​curs-8-so/?​kw=view-3noq9rp6p95k&​rc=ref-31844697 | Curs 08 - Fire de execuție (vizualizare Prezi)]]   * [[http://​prezi.com/​3noq9rp6p95k/​curs-8-so/?​kw=view-3noq9rp6p95k&​rc=ref-31844697 | Curs 08 - Fire de execuție (vizualizare Prezi)]]
   * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-08.pdf | Curs 08 - Fire de execuție (PDF)]]   * [[http://​elf.cs.pub.ro/​so/​res/​cursuri/​SO_Curs-08.pdf | Curs 08 - Fire de execuție (PDF)]]
 +
 +  * [[https://​drive.google.com/​open?​id=1oXIYiGsEYUNviw2BJ27XFzJnIDcKg7H_MxcY0ifnMJA|Notițe de curs]]
 +
   * Suport curs   * Suport curs
     * Operating Systems Concepts Essentials     * Operating Systems Concepts Essentials
Line 146: Line 149:
  
 În cazul folosirii programelor cu thread-uri, trebuie folosite versiunile reentrante ale funcțiilor de bibliotecă. În cazul folosirii programelor cu thread-uri, trebuie folosite versiunile reentrante ale funcțiilor de bibliotecă.
 +
 +==== Implementare de thread-uri în Java și Python ====
 +
 +În Java și Python implementările de thread-uri sunt cu suport din partea sistemului de operare. Adică o operație de creare a unui thread rezultă în crearea unui thread în kernel space (kernel-level threads).
 +
 +Pentru a verifica acest lucru accesăm subdirectorul ''​lang/''​ unde avem fișierul sursă ''​MultithreadingTest.java''​ și ''​threading_demo.py''​. Pentru a compila fișierul ''​MultithreadingTest.java''​ folosim comanda ''​make''​.
 +
 +Rularea ambelor programe duce la crearea de a câte unui thread în momentul apăsării tastei ''​ENTER''​. Pentru Java rulăm comanda:
 +<​code>​
 +$ java MultithreadingTest
 +Press ENTER to create new thread ...
 +
 +Press ENTER to create new thread ...
 +Thread 12 is running
 +
 +Press ENTER to create new thread ...
 +Thread 13 is running
 +
 +Press ENTER to create new thread ...
 +Thread 14 is running
 +
 +Press ENTER to create new thread ...
 +Thread 15 is running
 +[...]
 +</​code>​
 +Durează ''​SLEEP_TIME''​ secunde ca thread-urile să își încheie execuția.
 +
 +Pentru Python rulăm:
 +<​code>​
 +$ python threading_demo.py
 +Press ENTER to create new thread ...
 +
 +Thread 140481023772416 is runningPress ENTER to create new thread ...
 +
 +
 +Thread 140481015379712 is running
 +Press ENTER to create new thread ...
 +
 +Press ENTER to create new thread ...
 + ​Thread 140481006987008 is running
 +
 +Thread 140480796948224 is running
 + Press ENTER to create new thread ...
 +[...]
 +</​code>​
 +La fel, durează ''​SLEEP_TIME''​ secunde ca thread-urile să își încheie execuția.
 +
 +Pentru a verifica faptul că sunt într-adevăr create thread-uri noi rulăm în altă terminal comenzile de mai jos pentru Java:
 +<​code>​
 +$ ps -efL | grep Multithreading | wc -l
 +35
 +$ ps -efL | grep Multithreading | wc -l
 +36
 +$ ps -efL | grep Multithreading | wc -l
 +37
 +$ ps -efL | grep Multithreading | wc -l
 +43
 +</​code>​
 +Observăm creșterea numărului de thread-uri pe măsură ce le creăm folosind opțiunea ''​-L''​ a comenzii ''​ps''​ (pentru //​lightweight process//).
 +
 +La fel procedăm și pentru Python:
 +<​code>​
 +$ ps -efL | grep threading_demo | wc -l
 +2
 +$ ps -efL | grep threading_demo | wc -l
 +4
 +$ ps -efL | grep threading_demo | wc -l
 +8
 +</​code>​
 +
 +De avut în vedere că în Python, deși thread-urile au suport în kernel și au potențialul de a rula simultan, nu vor face aceste lucru din cauza unui lock global din interpretorul Python numit GIL ([[https://​wiki.python.org/​moin/​GlobalInterpreterLock|Global Interpreter Lock]]). Este vorba de CPython, intepretorul de referință Python. IronPython nu are GIL și poate rula cu adevărat în paralel thread-uri cu suport de la nivelul nucleului.
so/cursuri/curs-08.1487860295.txt.gz · Last modified: 2017/02/23 16:31 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0