MS Lesson26: Threads

1. Process - emeliyyat sistemi terefinden ishe salinan, oz ayrica yaddash sahesine malik olan programin icra nusxesidir. 

Mes biz kompumuzda muxtelif programlar acanda Paint, Excel ve s. bunlar ferqli proseslerdir. 

OS her bir prosese ferqli registerler, stack memory, heap memory assign edir. 


Restoran misali:

Restoran = process

Bina = yaddash (RAM)

Ishciler = thread


Yeni process ishe salinmish bir programdir.


* Her proses oz yaddashinda ishleyir, bashqasina toxuna bilmez.

* OS her prosese unikal ID verir.

* Yaratmaq / silmek bahalidir.

* Biri crash olsa, digerine tesir etmir. 


Bir prosesin icinde coxlu thread ola biler. Amma bir thread yalniz bir prosese aid ola biler. 

Java kodu bashlayanda JVM ozu de bir nece thread yaradir:

* main thread - bizim kodumuz

* GC thread - Garbage Collector

* Finalizer thread

* Signal Dispatcher thread


2. Thread - process icinde ishleyen ayrica ish axinidir. Kodun setir setir icra olundugu yoldur. 

Restoran - process

Ashpaz 1 - pizza bishirir - thread1

Ashpaz 2 - salat hazirlayir - thread2

Ashpaz 3 - desert duzeldir - thread3

Hami eyni anda ishleyir - paralel. 

Hami eyni metbexte ishelyir - eyni yaddash.



3. Time Slicing

CPU - tekce beyin deyil, milyardlarla tranzistordan ibaret cipdir. Tranzistor elektrik kecirik ya kecirmir 0 ve 1. 




Core - CPU-nun icinde musteqil bir ishcidir. Ona kod verirsen o da icra edir, bashqa hecne bilmir. 

CPU - fabrika, Core - fabrikadaki ishci.

Core-un icinde 4 esas sahe var:

1. Fetch unit: "Novbeti emri getir"

RAM-da bizim Java kodumuz durur:

Unvan 100: int a = 5;

Unvan 104: int b = 3;

Unvan 108: int c = a + b;

Fetch unit: 

"Unvan 100 get -> Decode ver"

"Unvan 104 get -> Decode var"

...

Problemi: RAM yavashdir, 70 nanosaniye gozlemek lazimdir, Core ise 0.3 nanosaniyede ishleyir. Yeni Core RAM-dan 200x daha suretlidir. Buna gore Core-un daxilinde oz cache-i var. 


2. Decode unit: "Bu emr ne demekdir?"

Tercumeci, genen emri CPU diline cevirir. 

Sən yazırsan:

int c = a + b;


JVM çevirir (Bytecode):

iload_1      ← a-nı yüklə

iload_2      ← b-ni yüklə

iadd         ← topla

istore_3     ← c-yə yaz


CPU görür (Machine Code):

10110000 00000101

10110011 00000011

00000001 11000011


Decode unit bunlari oxuyur ve deyir:

"A-nı Register-ə yüklə"

"B-ni Register-ə yüklə"  

"İkisini ALU-da topla"

"Nəticəni Register-ə yaz"


3. ALU: "Hesablama et"

Arithmetic Logic Unit - butun hesablama burada gedir. 


4. Register: "Neticeni saxla"

Yaddaş növləri sürətə görə:


Register  │██████████████████████│ 0.3 ns  ← Core-un içi

L1 Cache  │████████████████      │ 1   ns

L2 Cache  │████████              │ 5   ns

L3 Cache  │████                  │ 15  ns

RAM       │█                     │ 70  ns  ← 200x yavaş!

SSD       │                      │ 100 µs

HDD       │                      │ 10  ms


Core-da cəmi ~16 Register var Hər biri 64 bit = 8 byte saxlayır


















Комментарии

Популярные сообщения из этого блога

Interview questions

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java