ΠΡΠ²Π΅ΡΡ Π½Π° 100+ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ Java Concurrency
- ΠΠ±ΡΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
- Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠ½Π° Π»ΠΈ Π² Java. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΊΠ°ΠΊΠ°Ρ ΡΠΎΠ³Π΄Π° Π² Java?
- Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΈ Π²ΡΡΠ΅ΡΠ½ΡΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«Π·Π΅Π»Π΅Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊΠΈΒ» ΠΈ ΠΎΠ½ΠΈ Π»ΠΈ Π² Java (Π² HotSpot JVM 7)?
- ΠΠΎΠ³Π΄Π° Π½Π°ΡΠ°Π»Π°ΡΡ Β«Multicore EraΒ»?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ β ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ²? ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ*
- ΠΠ°ΠΊΠΈΠ΅ Π²ΡΠΈΠ³ΡΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅?
- Β«ΠΠ΅Π»Π΅Π·ΠΎΒ»
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Flynnβs taxonomy, SISD/MISD/SIMD/MIMD? Π ΠΊΠ°ΠΊΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ CPU?
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΡΡΠ΅ΠΉ L1/L2/L3? Π§ΡΠΎ Π²ΡΠ·Π²Π°Π»ΠΎ Π΅Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅*
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory wall?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory Hierarchy?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache line? Π Π²ΠΈΠ΄Π΅ ΠΊΠ°ΠΊΠΈΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ False sharing? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory padding?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache pollution? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache miss? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
- Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ SMP ΠΈ NUMA? ΠΠ°ΠΊ ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ?
- Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Multicore ΠΈ Multisocket?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Thread affinity? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π² Java?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Inter Thread Parallelism? Task Parallelism?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Branch Prediction?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Speculative Execution?
- Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° β ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ΄Π΅ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΈ Π΄Π²ΡΠΌΡ Π΄Π²ΡΡ ΡΠ΄Π΅ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ*
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ False sharing*
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° L1
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° L2
- Java Memory Model
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before?
- ΠΠΎΡΠ΅ΠΌΡ happens-before β ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ data-race?
- ΠΠ°ΠΊΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ volatile?
- ΠΠ°ΠΊΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ final?
- ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ hashCode Ρ java.lang.String ΠΈΠΌΠ΅Π΅Ρ data race β ΠΠ°Ρ ΡΡΠΎ Π½Π΅ ΠΏΡΠ³Π°Π΅Ρ?
- ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ ΡΠΌΡΡΠ» Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β«data race free ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ sequential consistentΒ».*
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ volatile?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ synchronized?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ AtomicInteger?
- ΠΡΠΎΠΌΠ°ΡΠ½ΠΎ Π»ΠΈ ++ Π΄Π»Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ?
- ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ API, ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ/ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
- Thread.getState() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Thread.State. ΠΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ?
- ΠΡΠ»ΠΈΡΠΈΠ΅ Thread.start() ΠΈ Thread.run()?
- Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Thread.interrupt()?
- Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Thread.stop()?
- ΠΠΎΡΠ΅ΠΌΡ Thread.stop()/destroy()/suspend()/resume() β deprecated?
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΊΠΎΡΠΈΡΡ InterruptedException*
- Π§ΡΠΎ ΠΈΠ· Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ happend-before: Thread.sleep(), Thread.join(),Thread.yield(), Thread.start(), Thread.run(), Thread.isAlive(), Thread.getState()?
- Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Thread.sleep() ΠΈ Thread.yeild()?
- Π ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Double Checked Locking? ΠΠ°ΠΊ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΡΠΈΠ½Π³Π»Π΅ΡΠΎΠ½ Ρ Π΄Π΅ΡΠ΅Π²ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Safe Publishing?
- ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ volatile?
- ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ synchronized?
- ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ AtomicBoolean?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΠΎΠ½ΠΈΡΠΎΡ?
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ synchronized/Object.wait()/.notify()/.notifyAll()
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° synchronized/Object.wait()/.notify()/.notifyAll()
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² blocking-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°*
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· blocking-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² wait-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· wait-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
- Π Π°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Thread.isInterrupted() ΠΈ Thread.interrupted()?
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Private mutex
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Spin lock/Busy waiting
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ backoff protocol (expotential backoff)
- Π§ΡΠΎ ΡΡΠΎ Π·Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ β Β«reentrancyΒ»?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«poison messageΒ»?
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«mutual exclusionΒ»? ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π² Java
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«condition waitingΒ»? ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π² Java
- java.util.concurrent: ΠΡΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², Future
- Π Π°Π·Π»ΠΈΡΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ Runnable ΠΈ Callable
- ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ScheduledThreadPool ΠΏΠ΅ΡΠ΅Π΄ java.util.Timer
- ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Future/CompletableFuture β ΡΡΠΎ ΠΌΠΎΠ½Π°Π΄Π°. Π§ΡΠΎ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅?
- Π ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ForkJoinPool Π½Π°Π΄ ThreadPoolExecutor?
- ΠΠ°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Ρ ScheduledThreadPool Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ThreadPoolExecutor?
- Π ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² sheduleAtFixedRate() ΠΎΡ sheduleAtFixedDelay() ΠΊΠ»Π°ΡΡΠ° SheduledThreadPool?
- Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
- java.util.concurrent: ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Producer/Consumer.
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Master/Workers
- Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Pipes-and-Filters, SEDA
- Π§ΡΠΎ Π² SynchronousQueue ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ BlockingQueue
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«ΡΠ°Π½Π΄Π΅Π²ΡΒ»? ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ°ΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π² Java Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ?
- ΠΠΎΡΠ΅ΠΌΡ TransferQueue ΠΠ BlockingQueue?
ΠΠ±ΡΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ?
ΠΡΠΎΡΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ ΠΠ‘ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ. ΠΠ½, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π² ΡΠ΅Π±Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΎΡΠ΅ΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ (Π³Π»Π°Π²Π½ΡΠΉ) ΠΏΠΎΡΠΎΠΊ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠ½Π° Π»ΠΈ Π² Java. ΠΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΊΠ°ΠΊΠ°Ρ ΡΠΎΠ³Π΄Π° Π² Java?
ΠΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ.
Π Java Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΈ Π²ΡΡΠ΅ΡΠ½ΡΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ
ΠΡΠΈ Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ(~ 1ΠΌΡ), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ. ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠ°Π΄Π°ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ. ΠΡΠΈ Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΠΎ ΠΎΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΠ»Π° ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ:
-
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’ΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΡΠ²Π°Π½Π° ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ Ρ ΠΆΠ΅ΡΡΠΊΠΈΠΌΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΌΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
-
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ²ΠΎΠ΅ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
-
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ Ρ Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ:
-
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ ΡΠ΅Π±Π΅ Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΡΠ²Π΅Ρ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ.
-
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΡΠ»ΡΡΠΈΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ "Π·Π°Π²ΠΈΡΠ°Π΅Ρ", ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΠ²ΠΎΡ Π·Π°Π΄Π°ΡΡ.
Π’ΠΎ Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ°, ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΠ°Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ ΡΠ΅Π±Π΅ Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΈ Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ.
-
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ΄Π°Π²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ½Π° ΡΠ°ΠΌΠ° Π·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ.
Π‘ΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΡΠ΅ΡΠ½ΡΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΆΠ΅ΡΡΠΊΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΎΠ΅, Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ΅, Π°ΡΡΠΎΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅) ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«Π·Π΅Π»Π΅Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊΠΈΒ» ΠΈ ΠΎΠ½ΠΈ Π»ΠΈ Π² Java (Π² HotSpot JVM 7)?
"ΠΠ΅Π»Π΅Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ" - ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π° Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠ½ΠΈ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΡΠ΄ΡΠ°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π·Π΅Π»Π΅Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π»Π΅Π³ΡΠ΅, ΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΡΠ΅ΠΊ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈ Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΡΠ΄ΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ). ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΡΡΡΠΈ Π·Π΅Π»Π΅Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΡΡΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΠ΅Ρ, Π² Java ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠ°ΠΏΠΏΡΡΡΡ 1 Π² 1 Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ.
ΠΠΎΠ³Π΄Π° Π½Π°ΡΠ°Π»Π°ΡΡ Β«Multicore EraΒ»?
Π Π½Π°ΡΠ°Π»Π΅ 2000-Ρ Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΡΠ² ΡΠ΅ΡΠΈΠΈ POWER ΠΎΡ IBM. ΠΠ°ΡΠ΅ΠΌ Π² 2005 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Pentium D ΠΈ AMD Athlon 64 X2. Π‘Π²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°ΡΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π»Π° ΡΠ°ΡΡΠΈ ΠΈΠ·-Π·Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ½ΠΈΠΈ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΠΈ ΡΡΠ°Π½Π·ΠΈΡΡΠΎΡΠΎΠ² Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ ΠΊΡΠΈΡΡΠ°Π»Π»Π°. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ°ΡΡΡ - The Free Lunch Is Over
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ β ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ²? ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ*
ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ² - ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ΅ Π·Π°Π΄Π°ΡΠ° - ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
-
ΠΠ°Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ;
-
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ, ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π±ΡΡΠ΅Ρ;
-
ΠΠΎΠ³Π΄Π° Π·Π°ΠΊΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ - ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ;
-
ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Ρ Π³ΠΎΠ»ΠΎΠ²Ρ Π±ΡΡΠ΅ΡΠ°;
-
ΠΠΎΠ»ΠΎΠ²Π° Π±ΡΡΠ΅ΡΠ° ΡΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ;
-
ΠΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ;
-
Π’Π΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ;
-
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π±ΡΡΠ΅ΡΠ°
ΠΠ°ΠΊΠΈΠ΅ Π²ΡΠΈΠ³ΡΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅?
-
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ "ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ" Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ;
-
ΠΡΡΡΠ°Ρ "ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΠΎΡΡΡ" ΡΠΈΡΡΠ΅ΠΌ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ΅Π½ Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ, Π° Π½Π΅ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ;
-
ΠΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ n Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ I/O (ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅ΡΠΈ) ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π³ΠΎΡΠΎΠ²Ρ. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, ΡΠΎ ΠΌΡ Π±Ρ ΡΡΠ°ΡΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ΅ΡΠΈ.
Β«ΠΠ΅Π»Π΅Π·ΠΎΒ»
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Flynnβs taxonomy, SISD/MISD/SIMD/MIMD? Π ΠΊΠ°ΠΊΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ CPU?
Π’Π°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡ Π€Π»ΠΈΠ½Π½Π° - ΡΡΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ ΠΏΠΎ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ .
-
SISD - Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (ΡΠΈΠΏΠΈΡΠΈΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ²).
-
MISD - Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠ°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°).
-
SIMD - Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, GPU).
-
MIMD - Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ).
ΠΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ SISD ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΊ SIMD ΠΈΠ»ΠΈ MIMD. GPU ΡΠ²Π»ΡΠ΅ΡΡΡ SIMD ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠ°-Π΄Π°Π½Π½ΡΠΌΠΈ.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΡΡΠ΅ΠΉ L1/L2/L3? Π§ΡΠΎ Π²ΡΠ·Π²Π°Π»ΠΎ Π΅Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅*
L1/L2/L3 - ΠΊΡΡΠΈ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ.
-
L1 - ΠΊΡΡ Π½Π° ΡΠ΄ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 1 Π½Ρ. Π Π°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 32 ΠΠ.
-
L2 - Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΠΉ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΠΊΡΡ. Π‘ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 5 Π½Ρ. Π Π°Π·ΠΌΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° 256 ΠΠ.
-
L3 - ΠΊΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅, ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΄Π΅Ρ. Π‘ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 20 Π½Ρ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ (8-32 MB).
ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ΅ΠΉ Π²ΡΠ·ΡΠ²Π°Π»ΠΎ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π½Π°ΡΠ°Π»Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (ΠΏΠΎΡΡΠ΄ΠΊΠ° 60 Π½Ρ), ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΊΡΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ "Π³ΠΎΡΡΡΠΈΠΌΠΈ" Π΄Π°Π½Π½ΡΠΌΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory wall?
Memory wall - ΡΡΠΎ ΡΠ΅ΡΠΌΠΈΠ½, ΠΎΠΏΠΈΡΠ°Π²Π°ΡΡΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ°ΡΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π² 70-90-Π΅ Π³ΠΎΠ΄Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π»Π°ΡΡ Π² 2 ΡΠ°Π·Π° ΠΊΠ°ΠΆΠ΄ΡΠ΅ 2 Π³ΠΎΠ΄Π°, ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π»ΡΡ Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ. Π ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ΅Π»ΠΎΠΌ ΡΠΏΠΈΡΠ°Π»Π°ΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΠ»Π½ΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory Hierarchy?
Memory Hierarchy - ΡΠ΅ΡΠΌΠΈΠ½ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . Π§Π΅ΠΌ Π½ΠΈΠΆΠ΅ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ, ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π»Π΅ ΡΠ΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΉ. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΡΡΡ 4 ΡΡΠΎΠ²Π½Ρ:
-
Π Π΅Π³ΠΈΡΡΡΡ ΠΈ ΠΊΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° (ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 100-500 ΠΠ±/c)
-
ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ (ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 1-10 ΠΠ±/c)
-
ΠΠΈΡΠΊΠΈ (ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 100-500 ΠΠ±/c)
-
Π’ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° (ΡΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΡΠ΄ΠΊΠ° 10-100 ΠΠ±/c)
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache line? Π Π²ΠΈΠ΄Π΅ ΠΊΠ°ΠΊΠΈΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ?
Cache line - Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ (ΠΎΠ±ΡΡΠ½ΠΎ 64 Π±Π°ΠΉΡ), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· ΠΎΠΏΠ΅ΡΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΎΠ½ Π²ΠΌΠ΅ΡΡΠΎ 1 Π±Π°ΠΉΡΠ° ΡΠΈΡΠ°Π΅Ρ ΡΡΠ°Π·Ρ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠ»Π°Π΄Π΅Ρ ΡΡΠΎΡ Π±Π»ΠΎΠΊ Π² ΠΊΡΡ. Π’Π°ΠΊΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΠΎΠ±Π»Π°Π΄Π°ΡΡ Ρ ΠΎΡΠΎΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΡΡ. Π’ΠΎΠ³Π΄Π° ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ΄ΡΡ Π² ΠΊΡΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ False sharing? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
False sharing - ΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³ΠΎΠΌ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΎΠ΄Π½Ρ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΡ. Π ΠΈΡΠΎΠ³Π΅ ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ Π² ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ, Π²ΡΡ Π»ΠΈΠ½ΠΈΡ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅ΡΡΡ. ΠΡΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΡΡΠ΅ΠΊΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ΅ΡΠΈΠ½Π³ (thrashing) - ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΊΡ ΠΈ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΡ ΠΊΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΏΠ°ΡΡ Π½Π° ΠΎΠ΄Π½Ρ Π»ΠΈΠ½ΠΈΡ Ρ ΡΠ°ΡΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΌΠΈ. ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΈΠ½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ· ΠΊΡΡΠ° Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Ρ ΠΎΡΡ ΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ. ΠΠΎΡΠΎΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΠΏΠ°Π΄Π΄ΠΈΠ½Π³Π° (padding). Π§Π°ΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»ΠΈΠ½Ρ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΡΠΈΠ²Π½ΡΡ Π±Π°ΠΉΡΠΎΠ². Π ΠΈΡΠΎΠ³Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌΠΈ Π½Π° ΠΊΡΡ-Π»ΠΈΠ½ΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ "ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅" Π΄Π°Π½Π½ΡΠ΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Memory padding?
Memory padding - ΡΡΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ»ΠΎΠ²Π°. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠΏΠ°Π΄ΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΡ ΠΈ Π·Π°ΠΉΠΌΡΡ Π΅Π΅ ΡΠΊΡΠ»ΡΠ·ΠΈΠ²Π½ΠΎ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠΈΠ½Π³Π° ΠΊΡΡΠ°, Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π° Π»ΠΈΠ½ΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π½Π΅ ΡΠΎΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π΄Π°Π½Π½ΡΠ΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache pollution? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
Cache pollution - ΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ΅ΡΠΈΠ½Π³ ΠΊΡΡΠ΅ΠΉ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ, ΡΠΎ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ 1-ΠΌΡ ΠΈ 2-ΠΌΡ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΎ ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΡΡΠ΅ΠΊΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π·Π°ΠΌΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΠΏΡΠΈΡΠΈΠ½Ρ. ΠΠΎΡΠΎΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ "Π³ΠΎΡΡΡΠΈΠΌΠΈ" Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΠΊΡΡΠ΅ ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cache miss? ΠΠ»ΠΎΡ ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΎ? ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ?
Cache miss - ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ Π² ΠΊΡΡΠ΅. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΈΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΡΠ°ΠΊ Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·, ΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² ΠΊΡΡ. ΠΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠ°ΡΡΠΎ ΡΠΏΠ΅ΠΊΡΠ»ΠΈΡΡΡΡ ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°Ρ Π΄ΠΎΡΡΡΠΏΠ° Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΌ Π±Π»ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ ΠΊΡΡΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΉ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π±Π»ΠΈΠ·ΠΊΠΎ Π»Π΅ΠΆΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠΌΠ°Ρ ΠΎΠ² Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΌΠ°Ρ ΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½Ρ ΠΈ ΠΊΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ³ΡΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΡΠΎΡΡΡΡ Ρ ΠΏΡΠΎΠΌΠ°Ρ Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ (Π±ΠΎΠ»ΡΡΠ°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ), ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠ΅ΡΠ½ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ (ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΡΠ΅ΡΠΈΠ½Π³Π°), ΡΡΠ½ΠΈΠ½Π³ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΡΡΠ°.
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ SMP ΠΈ NUMA? ΠΠ°ΠΊ ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ?
SMP-ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ Π±ΠΎΠ»ΡΡΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ. ΠΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΠΈΠ½Ρ Π΄Π°Π½Π½ΡΡ . Π NUMA-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ°ΠΌΡΡΡ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠΈΠ½Π°. ΠΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΡΠ°ΡΠΈΠΊ Π½Π° ΡΠΈΠ½Π°Ρ Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° NUMA-ΡΠΈΡΡΠ΅ΠΌ (ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΎΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ), ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ SMP ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΠ²ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅Π½Ρ (~100 Π½Ρ) ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Multicore ΠΈ Multisocket?
-
Multicore - ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ΄ΡΠ°ΠΌΠΈ.
-
Multisocket - ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ².
Multisocket ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΠΎΠΆΠ΅, ΡΠ΅ΠΌ Multicore (Π½ΡΠΆΠ΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. Π ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ). ΠΠ½ΠΈ Π»ΡΡΡΠ΅ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΡ ΠΎΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° (ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ). Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠΈΠ½Π³Π° L3-ΠΊΡΡΠ΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΠ΅. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Multicore ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΡΡΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Ρ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ Π²ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΡΠ΄ΡΠ°/ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π°ΡΡΠ΅Ρ L3 ΠΊΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ ΡΠ΄ΡΠΎ Π½Π° ΡΠ΄ΡΠΎ Π² multicore-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΡΡΡΡΠ΅Π΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Thread affinity? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π² Java?
Thread affinity - ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΡΠ΄ΡΡ. ΠΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΌΡΠ»ΡΡΠΈΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΠ΅ ΡΠ΅Π»Ρ - ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΏΡΠΎΡΠ΅Π½Ρ "ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ" Π² ΠΊΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π΄Π°Π½Π½ΡΠΌ. Π‘ΠΌΡΡΠ» ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·Ρ ΠΈΠ· Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ . Π’ΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π΅ΡΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΊΠ²Π°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π΅ΠΌΡ Π»ΡΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΄ΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΎ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΡΡΠ΅. ΠΠ· Java Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π»ΡΠ·Ρ, Π½ΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π· JNA/JNI, Π΅ΡΠ»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΡΠ΅Π»Π΅Π²Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Inter Thread Parallelism? Task Parallelism?
Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΠ΅ΡΠΌΠΈΠ½Ρ ΠΌΠ½Π΅ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π²ΠΈΠ΄Ρ hyper threading?
ΠΡΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°ΡΡΠ΅Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ². ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ 2 ΠΏΠΎΡΠΎΠΊΠ° Π½Π° "Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅" ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΠΈ ΠΊΠ»Π°Π΄Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΡΠΎΡΠ΅ΡΡΠΎΡ ΠΆΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΡΠ°Π·Ρ 2 ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. ΠΡΠΎΡΠ΅ΡΡΠΎΡ, ΠΈΠΌΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Branch Prediction?
Branch Prediction - ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²Π΅ΡΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΠ½Π²Π΅Π΅ΡΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄ΠΎ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠΎ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· Π²Π΅ΡΠΎΠΊ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, Π±ΡΠ»Π° Π΄ΠΎΠ³Π°Π΄ΠΊΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π΅ ΡΠ³Π°Π΄ΡΠ²Π°Π΅Ρ Π²Π΅ΡΠΊΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½Π°Π·Π°Π΄ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΊΠΎΠ½Π²Π΅Π΅Ρ ΡΠ½Π°ΡΠ°Π»Π°.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Speculative Execution?
Speculative Execution - ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° ΠΎΠ΄Π½Ρ Π²Π΅ΡΠΊΡ, ΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π΄ΠΊΠΎ Π½Π° Π΄ΡΡΠ³ΡΡ. ΠΡΠΈΠΌΠ΅Ρ - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠΈ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π΅ Π΄Π΅Π»Π°Π» Π±Ρ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠΎ ΠΎΠ½ Π±Ρ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ Π±ΡΠ» Π²ΡΠ΅Π³Π΄Π° ΠΆΠ΄Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ. Π ΡΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ Π²Π΅ΡΠΊΠ΅ Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΠΊΠΎΠ½ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π ΡΠ΅Π΄ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΊ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π²Π΅ΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° β ΠΌΠ°ΡΠΈΠ½Ρ Ρ ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ΄Π΅ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΈ Π΄Π²ΡΠΌΡ Π΄Π²ΡΡ ΡΠ΄Π΅ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ*
Π ΠΎΠ±ΡΠ΅ΠΌ, Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ. ΠΠ‘ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ 4 Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ - ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ 2 Π±ΠΎΠ»ΡΡΠΈΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’ΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ , ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠΈΠ½Π³Π° L1-L2 ΠΊΡΡΠ°.
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ False sharing*
Π‘ΠΌ. false-sharing
ΠΠ΅Π½ΡΠΌΠ°ΡΠΊ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠ°Π΄Π΄ΠΈΠ½Π³Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΡΡΡΠ΅ΠΊΡ false sharing. Π’ΠΎ Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠΎΠ»Π΅ y Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»Π°ΡΡ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΡ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ ΠΈ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅ x Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, Π° Π½Π΅ ΠΈΠ· ΠΊΡΡΠ°.
ΠΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΠΉ Π² 3 ΡΠ°Π·Π° Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° JVM Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅ x ΠΏΠΎ Π»ΠΈΠ½ΠΈΠΈ ΠΊΡΡΠ°.
c.g.a.b.FalseSharingBenchmark.contended:read thrpt 10 60.870 Β± 5.394 ops/us c.g.a.b.FalseSharingBenchmark.falseSharing:read thrpt 10 19.164 Β± 5.159 ops/us
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° L1
Π‘ΠΌ. l1-cache-size
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° ΠΎΠΏΡΡΠ½ΡΠΌ ΠΏΡΡΡΠΌ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡβ¦β
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° L2
Π‘ΠΌ. l2-cache-size
ΠΠΏΡΡΡ ΠΆΠ΅, ΠΎΠΏΡΡΠ½ΡΠΌ ΠΏΡΡΡΠΌ Π½Π°ΠΉΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ.
Java Memory Model
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ?
Π§Π°ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ - ΡΡΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, Π°Π½ΡΠΈΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΡΡΠΈ.
-
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠΌ.
-
ΠΠ½ΡΠΈΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎ. Π’ΠΎ Π΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΊ Π½Π΅ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, ΠΏΠΎΠΌΠ΅Π½Π½ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, Π±ΡΠ΄Π΅Ρ Π»ΠΎΠΆΠ½ΡΠΌ.
-
Π’ΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² A ΠΈ B ΠΈ Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² A ΠΈ C, ΡΠΎ ΠΎΠ½ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ Π΄Π»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² A ΠΈ C.
ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ "Π±ΡΡΡ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ".
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before?
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before (ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ-Π΄ΠΎ) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ-Π΄ΠΎ Π΄ΡΡΠ³ΠΎΠΉ, ΡΠΎ Π΅Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ.
ΠΠΎΡΠ΅ΠΌΡ happens-before β ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ?
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°.
-
Π Π΅ΡΠ»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ Π½Π΅Π΅ ΡΠ°ΠΌΠΎΠΉ.
-
ΠΠ½ΡΠΈΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΡΡΡ. ΠΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ A Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ B, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ B Π±Ρ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΈ Π½Π΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ A.
ΠΡΠ»ΠΈ Π±Ρ B Π±ΡΠ»Π° Π±Ρ Π²ΠΈΠ΄Π½Π° Π΄Π»Ρ A, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄Π»Ρ Π΅Π΅ (A) Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ B ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π΄ΠΎ A. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ A Π²ΠΈΠ΄Π΅Π½ Π΄Π»Ρ B, ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄Π»Ρ Π΅Π΅ (B) Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ A ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π΄ΠΎ B. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ "ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π΄ΠΎ/Π±ΡΠ» ΡΠ°Π½ΡΡΠ΅" ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎ, ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΎ B ΠΏΡΠΎΠΈΠ·ΡΠ»Π° Π΄ΠΎ B. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, B Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΈΠ΄Π½Π° Π΄Π»Ρ A.
-
Π’ΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎΡΡΡ. ΠΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ A Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ B ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ B Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ C, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ A Π²ΠΈΠ΄ΠΈΠΌ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ Π΄Π»Ρ Π‘.
Π’Π°ΠΊ ΠΊΠ°ΠΊ A Π²ΠΈΠ΄Π½Π° Π΄Π»Ρ B, ΡΠΎ ΠΎΠ½Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π΄ΠΎ B Π² Π΅Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ B Π²ΠΈΠ΄ΠΈΠΌΠ° Π΄Π»Ρ C, ΡΠΎ ΠΎΠ½Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π΄ΠΎ C Π² Π΅Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ "ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π΄ΠΎ/Π±ΡΠ» ΡΠ°Π½ΡΡΠ΅" ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΎ, ΡΠΎ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ A Π²ΠΈΠ΄ΠΈΠΌΠ° Π΄Π»Ρ C.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ data-race?
Data-race β ΡΡΠΎ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ/ΠΊΠΎΠ½ΠΊΡΡΠ΅ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ Π² Π½Π΅Π΅ ΠΏΠΈΡΠ΅Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ "Π³ΠΎΠ½ΠΊΠ°". Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠ΅Π½ΠΈΡ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΡΠΈΠ³ΡΠ°Π΅Ρ "Π³ΠΎΠ½ΠΊΡ" Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
ΠΠ°ΠΊΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ volatile?
ΠΠ°ΠΏΠΈΡΡ Π² volatile ΠΏΠΎΠ»Π΅ happens-before ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· volatile ΠΏΠΎΠ»Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΎΠΊ ΡΠΈΡΠ°ΡΡΠΈΠΉ ΠΈΠ· volatile ΠΏΠΎΠ»Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ²ΠΈΠ΄ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΡΠΎ ΠΏΠΎΠ»Ρ (Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ΅,ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡΠ΅ΠΌ ΡΡΠΎ ΠΏΠΎΠ»Π΅). ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ volatile ΠΏΠΎΠ»ΡΠΌΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ. Π’ΠΎ Π΅ΡΡΡ JMM Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠΎΡΠΎΠΊΠ΅ A, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ Π΄ΠΎ Π·Π°ΠΏΠΈΡΠΈ Π² volatile-ΠΏΠΎΠ»Π΅, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° B, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅.
ΠΠ°ΠΊΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ final?
ΠΠ°ΠΏΠΈΡΡ Π² final ΠΏΠΎΠ»Π΅ (ΠΏΡΠΈΠΌΠΈΡΠΈΠ², ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ) Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ°Π·Ρ Π²ΠΈΠ΄ΠΈΠΌΠ° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, ΡΡΠΎ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π² ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠΈ Π³ΠΎΠ½ΠΊΠΈ, Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ hashCode Ρ java.lang.String ΠΈΠΌΠ΅Π΅Ρ data race β ΠΠ°Ρ ΡΡΠΎ Π½Π΅ ΠΏΡΠ³Π°Π΅Ρ?
ΠΠ΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅ hash
Π² ΠΊΠ»Π°ΡΡΠ΅ String
ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int
. JMM Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ Π² 32-Π±ΠΈΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π°ΡΠΎΠΌΠ°ΡΠ½Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π² Π½Π΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π»ΠΈΠ±ΠΎ 0, Π»ΠΈΠ±ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ
ΡΡ-ΠΊΠΎΠ΄Π°. Π£ Π½Π°Ρ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ°Π·Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Ρ
ΡΡ-ΠΊΠΎΠ΄. ΠΡΠΎ ΠΏΠΎΠ»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΡΠ²ΠΈΠ΄Π΅Ρ Π² Π½Π΅ΠΌ 0, ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ΄Π΅Π»Π°Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠΌ.
ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ ΡΠΌΡΡΠ» Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β«data race free ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ sequential consistentΒ».*
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ sequential consistent, Π΅ΡΠ»ΠΈ Π΅Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π° Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Data race free ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π½ΠΈΠΉ-Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ Π½Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡΠΌΠΈ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ½ΡΡΡΠΈ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π½Π΅ Π½Π°ΡΡΡΠΈΡΡΡ, Π° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ΅ΠΊΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ volatile?
Ordering - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄ΠΎ volatile Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈΡΡ, Π° ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΠ°Π»ΠΈΡΡ.
Visibility - Π·Π°ΠΏΠΈΡΠΈ Π² volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ΅Π½ΠΈΠΉ.
Atomicity - Π·Π°ΠΏΠΈΡΠΈ Π² volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π°ΡΠΎΠΌΠ°ΡΠ½Ρ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ. Π’.Π΅ Π·Π°ΠΏΠΈΡΠΈ volatile long ΠΈ double ΠΏΠΎΠ»Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½Ρ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ "Π³ΠΎΠ»ΡΡ " long ΠΈ double.
Happens-before - Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠ½ΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² volatile ΠΏΠΎΠ»Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ΅Π½ΠΈΡΠΌ.
Mutual exclusion - volatile Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Π’ΠΎ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ volatile ΠΏΠΎΠ»ΡΠΌΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°. volatile Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ²ΠΈΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅Π΅, Π½ΠΎ Π½Π΅ Π·Π°ΡΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ synchronized?
Ordering - ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ synchronized
Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ. Π’ΠΎ Π΅ΡΡΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎ Π²Ρ
ΠΎΠ΄Π° Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ.
Visibility - Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ Π²ΠΈΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ΅Π½ΠΈΠΉ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠΉ ΠΆΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ.
Atomicity - synchronized
ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΠ΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΡ. ΠΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌΠΈ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ.
Happens-before - Π²Ρ
ΠΎΠ΄ Π² synchronized
Π±Π»ΠΎΠΊ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ happens-before Π²ΡΡ
ΠΎΠ΄Ρ ΠΈΠ· Π½Π΅Π³ΠΎ.
Mutual exclusion - synchronized
ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ordering, visibility, atomicity, happend-before, mutual exclusion Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ AtomicInteger?
Π£ AtomicInteger
ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ordering, visibility ΠΈ happens-before, ΠΊΠ°ΠΊ ΠΈ Ρ volatile, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅ value
Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ volatile.
Atomicity - ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ Π² AtomicInteger
Π°ΡΠΎΠΌΠ°ΡΠ½Ρ. ΠΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π·Π°ΡΡΠ΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° CAS. CAS-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄ΠΎ Π΅Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Mutual exclusion - AtomicInteger
Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½.
ΠΡΠΎΠΌΠ°ΡΠ½ΠΎ Π»ΠΈ ++ Π΄Π»Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ?
ΠΠ΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ++ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ 3 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ: ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ ΠΈ Π·Π°ΠΏΠΈΡΡ. volatile Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΌΡ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΡΠΌ Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ»Ρ), Π½ΠΎ Π½Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ Π½Π°Π±ΠΎΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. Π’ΠΎ Π΅ΡΡΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ 2 ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ "ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ".
ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ API, ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ/ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
Thread.getState() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Thread.State. ΠΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ?
-
NEW
- ΠΏΠΎΡΠΎΠΊ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½, Π½ΠΎ Π΅ΡΠ΅ Π½Π΅ ΡΡΠ°ΡΡΠΎΠ²Π°Π»; -
RUNNABLE
- ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠΎΡ ΡΡΠ°ΡΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄. ΠΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅; -
WAITING
- ΠΏΠΎΡΠΎΠΊ ΠΆΠ΄Π΅Ρ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅; ΠΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² Π½Π΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²wait()
,join()
Π»ΠΈΠ±ΠΎ ΠΏΠ°ΡΠΊΠΎΠ²ΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π·LockSupport.park()
-
TIME_WAITING
- ΠΏΠΎΡΠΎΠΊ ΠΆΠ΄Π΅Ρ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ Ρ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠΌ; Π’Π΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠΌ +sleep
. -
BLOCKED
- ΠΏΠΎΡΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅; ΠΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΠΎΠΉΡΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ, Π½ΠΎ ΠΎΠ½Π° ΡΠΆΠ΅ Π·Π°Π½ΡΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. -
TERMINATED
- ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠΈΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈΡΠΈΠ΅ Thread.start() ΠΈ Thread.run()?
Thread.start()
Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Thread.run()
ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ RUNNABLE ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠ΄ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. Π ΡΠ»ΡΡΠ°Π΅ ΠΆΠ΅ Π²ΡΠ·ΠΎΠ²Π° Thread.run()
ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·Π²Π°Π» ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄. Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΈ 2 ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½Ρ: run
ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π·Π°Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π° start
Π·Π° ΠΏΠΎΠ΄Π½ΡΡΠΈΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΠΊΡΡΡΡ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Thread.interrupt()?
ΠΠΎΡΠΎΠΊΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ·Π²Π°Π»ΠΈ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄, Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ»Π°Π³ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠ΅ΡΠ²Π°Π½. ΠΠΎΠ΄, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΎΡ ΡΠ»Π°Π³ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° interrupt
ΡΠΏΠ°Π», ΠΆΠ΄Π°Π», Π±ΡΠ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΈΠ»ΠΈ Π½Π° I/O(InterruptibleChannel), ΡΠΎ Π²ΡΠ±ΡΠΎΡΠΈΡΡΡ InterruptedException
ΠΈ ΡΠ»Π°Π³ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ±ΡΠΎΡΠΈΡΡΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ InterruptedException
, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π°Π»ΡΡΠ΅ (ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ).
Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Thread.stop()?
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Thread.stop
ΠΏΠΎΡΠΎΠΊ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ Π²ΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ Π΄Π΅ΡΠΆΠ°Π», Π²ΡΠΊΠΈΠ΄Π°Π²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ThreadDeath
ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎΡΠ΅ΠΌΡ Thread.stop()/destroy()/suspend()/resume() β deprecated?
ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ. ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΡΠ²Π°Π½ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈ ΠΎΠ±ΡΠ·Π°Π½ ΠΎΡΠΏΡΡΡΠΈΡΡ Π²ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π’ΠΎ Π΅ΡΡΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΡΠ²Π°ΡΡΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠΎ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠΌΠΎ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡΡΡ Π² ΠΊΠΎΠ΄Π΅ Π½ΡΠΆΠ½ΠΎ Π»ΠΎΠ²ΠΈΡΡ ThreadDeath
, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π΄Π°Π»ΡΡΠ΅. ΠΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π½Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅Π½, ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ»ΠΎΡ
ΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ ΡΠ±ΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π±Π΅Π· ΠΈΡ
ΠΎΡΠΈΡΡΠΊΠΈ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΊΠΎΡΠΈΡΡ InterruptedException*
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΡΡΠΏΠ°Π½ΠΈΡ
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Ρ Π²Π°ΡΠ°
ReentrantLock
ΡΠ΅ΡΠ΅Π·lockInterruptibly
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²
CountDownLatch
ΡΠ΅ΡΠ΅Π·await
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²
CyclicBarrier
ΡΠ΅ΡΠ΅Π·await
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²
Condition
ΡΠ΅ΡΠ΅Π·await
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Ρ Π²Π°ΡΠ° ΠΏΠΎΠΏΡΡΠΊΠΈ Π²
Semaphore
ΡΠ΅ΡΠ΅Π·acquireUninterruptibly
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²
Future
ΡΠ΅ΡΠ΅Π·get
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΌΡ Π²
Exchanger
ΡΠ΅ΡΠ΅Π·exchange
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ
BlockingQueue
-
ΠΠΎΡΠΎΠΊ ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Ρ I/O ΡΠ΅ΡΠ΅Π·
InterruptableChannel
Π ΠΎΠ±ΡΠ΅ΠΌ, ΠΏΠΎΡΡΠΈ Π»ΡΠ±ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π§ΡΠΎ ΠΈΠ· Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ happend-before: Thread.sleep(), Thread.join(),Thread.yield(), Thread.start(), Thread.run(), Thread.isAlive(), Thread.getState()?
Happens-before ΡΠΎΠ·Π΄Π°ΡΡ Thread.start()
, Thread.join()
ΠΈ Thread.isAlive()
. Thread.start()
ΡΠΎΠ·Π΄Π°Π΅Ρ hb ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Π² ΠΏΠΎΡΠΎΠΊΠ΅, Π° Thread.join()
ΠΈ Thread.alive()
ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π ΡΠ΅ΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Thread.sleep() ΠΈ Thread.yeild()?
ΠΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
-
Thread.sleep
ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅TIMED_WAITING
ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ½Π°. -
Thread.yeild
Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±ΡΠ°ΡΡ ΠΊΠ²Π°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΡΠΎΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈRUNNABLE
. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ JVM Π²ΠΎΠ»ΡΠ½Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²ΡThread.yeild()
ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅Π½Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½Π°.
Π ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Double Checked Locking? ΠΠ°ΠΊ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΡΠΈΠ½Π³Π»Π΅ΡΠΎΠ½ Ρ Π΄Π΅ΡΠ΅Π²ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ?
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² DCL Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΈΠ΄ΠΈΠΎΠΌΠ°. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½Π½Π°Ρ ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ½Π° Π²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΈΠ½Π³Π»ΡΠΎΠ½:
public class Singleton {
private static Singleton instance;
private String state;
private Singleton(String state) {
this.state = state;
}
public String getState(){
return state;
}
public static Singleton getInstance() {
if (instance === null) {
synchronized (this) {
if (instance === null) {
instance = new Singleton("I am the single one!");
}
}
}
return instance;
}
}
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
-
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΡΠΏ ΠΊ
instance
Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΡΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΠ½ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π³ΠΎΠ½ΠΊΡ. ΠΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΠΈΠ΄ΠΈΡ, ΡΡΠΎinstance!=null
ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,state
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ null). -
Π§ΡΠ΅Π½ΠΈΡ
instance
ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· Π³ΠΎΠ½ΠΊΡ. Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅instance===null
ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π±Π»ΠΎΠΊΠ΅ return Π²Π΅ΡΠ½Π΅Ρ ΡΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π’Π°ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ null.
ΠΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ holder-ΠΈΠ΄ΠΈΠΎΠΌΠΎΠΉ. ΠΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Holder
Π»Π΅Π½ΠΈΠ²ΠΎ Π³ΡΡΠ·ΠΈΡΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΡΡΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ°Π»ΡΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π· synchronized
, Π½ΠΎ ΡΠ°ΠΊ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ, JVM Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
public class Singleton {
private static class Holder {
private static final Singleton INSTANCE = new Singleton("I am the single one!");
}
private String state;
private Singleton(String state) {
this.state = state;
}
public String getState() {
return state;
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Safe Publishing?
Safe Publishing - Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΡΠΎ Π² ΡΡΠΎΠΌ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½.
ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ volatile?
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ°ΠΊ volatile. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΈΠ΄ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ synchronized?
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ synchronized, Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΠΈΠΌ Π² synchronized Π±Π»ΠΎΠΊΠ΅. ΠΠΎΡΠΎΠΊ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ, Π²ΡΠ΅Π³Π΄Π° ΡΠ²ΠΈΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Safe Publishing ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ AtomicBoolean?
Π£ AtomicBoolean
ΡΠΎΡΠ½ΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠ°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΊΠ°ΠΊ ΠΈ Ρ volatile. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΡΠ΅Π· AtomicBoolean
, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ AtomicBoolean
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π° ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π΅.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΠΎΠ½ΠΈΡΠΎΡ?
ΠΠΎΠ½ΠΈΡΠΎΡ - ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ Java-ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΎΠΉΡΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ, ΠΏΠΎΡΠΎΠΊΡ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ. ΠΡΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΠΎ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ BLOCKING. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ, ΠΎΠ½ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . ΠΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² wait-set ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ±ΡΠ΄ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΡ, Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ·ΡΠΊΠ° synchronized, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ synchronized/Object.wait()/.notify()/.notifyAll()
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ
Π²Π°ΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΠ»ΠΎ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π΄Π°Π½Π½ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ Π³ΠΎΡΠΎΠ²Ρ). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ
ΠΎΡΠ΅ΡΡΡ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ (ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡΠΏΡΡΠΊΠ°Ρ ΠΈ Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΡΡΠΎΠ±Ρ Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠ°Π½Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ), Π° ΡΡΠ½ΡΡΡ, ΠΎΡΠ΄Π°ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² wait
, notify
ΠΈ notifyAll
. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ
Π²Π°ΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²ΠΎΡΠ΅Π» Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ synchronized
, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ wait
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² wait-set ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΈ ΠΎΡΠΏΡΡΡΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ WAITING. ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ Π²ΠΎΠΉΡΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ notify
ΠΈΠ»ΠΈ notifyAll
. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΡΠ·Π²Π°Π½, ΠΏΠΎΡΠΎΠΊ ΠΆΠ΄ΡΡΠΈΠΉ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅, ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· wait-set ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ BLOCKING ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·Π²Π°Π» notify
ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ RUNNABLE. notify
ΠΎΡ notifyAll
ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Π² ΡΠΎΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ·ΡΠ²Π°ΡΡ notifyAll
, Ρ.ΠΊ. Π²ΡΠ·ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π°Π΅Ρ ΡΠ°Π½Ρ Π²ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΠΈ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° synchronized/Object.wait()/.notify()/.notifyAll()
Π‘ΠΌ. bounded-blockinq-queue
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² blocking-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°*
-
ΠΠΎΡΠΎΠΊ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ, Π½ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ ΡΠΆΠ΅ Π΅Π³ΠΎ Π΄Π΅ΡΠΆΠΈΡ
-
ΠΠΎΡΠΎΠΊ ΡΠΏΠΈΡ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ ΠΈ ΠΏΡΠΎΠ±ΡΠΆΠ΄Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
notify()
ΠΈΠ»ΠΈnotifyAll()
, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΎΠ½ ΠΏΡΠΎΡΡΠΏΠ°Π»ΡΡ, Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ Π²Π°ΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· blocking-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
-
ΠΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΡΠΆΠ°Π» ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΎΡΠΏΡΡΡΠΈΠ» Π΅Π³ΠΎ, Π²ΡΠΉΠ΄Ρ ΠΈΠ· ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ
-
Π ΠΊΠΎΠ΄Π΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ» Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΠΎΡΠΏΡΡΡΠΈΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡ
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² wait-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
-
ΠΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΡΠΆΠ°Π» ΠΌΠΎΠ½ΠΈΡΠΎΡ, Π²ΡΠ·Π²Π°Π» ΠΌΠ΅ΡΠΎΠ΄
wait
Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· wait-set Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°
-
ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, Π΄Π΅ΡΠΆΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡ, Π²ΡΠ·Π²Π°Π» ΠΌΠ΅ΡΠΎΠ΄
notify
ΠΈΠ»ΠΈnotifyAll
Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ -
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠΏΠ°Π» Π² ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²ΠΎΠΌ
wait
c ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠΌ, ΡΠΎ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡΠ° ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΠ½Π΅ΡΡΡ -
ΠΠΎΡΠΎΠΊ, ΠΏΠΎΠΏΠ°Π²ΡΠΈΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΏΡΠ΅ΡΠ²Π°Π½ Π²ΡΠ·ΡΠ²ΠΎΠΌ
Thread.interrupt
-
ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠ½ΡΡΡΡΡ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Π½Π° ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Ρ. ΠΠ‘ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ spurious wakeup.
Π Π°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Thread.isInterrupted() ΠΈ Thread.interrupted()?
Thread.isInterruped()
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Thread.interrupted()
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ»Π°Π³ Π² false
.Π’ΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Private mutex
ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ Π² ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ - Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ·Π°Π½ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ ΠΈ ΠΎΡΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π΅Π³ΠΎ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Spin lock/Busy waiting
ΠΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΠ»ΠΎ ΠΈ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΠΎΠ½ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΏΡΡΠ°Π΅ΡΡΡ ΠΊΡΡΡΠΈΡΡΡΡ Π² ΡΠΈΠΊΠ»Π΅, ΠΏΡΠΎΠ²Π΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅. ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·ΡΠΌΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ Π² user-mode ΠΈ ΠΆΠ΅ΡΡ ΡΠΈΠΊΠ»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΡΠΆΠ΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ΅ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ, ΡΠΎ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ΅ΠΌΡ ΠΈ ΠΎΠΏΡΡΠΊΠ°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±ΡΡΡΡΠ΅Π΅, ΡΡΠ°ΡΡ Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΠΈΠ΄ΠΈΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ backoff protocol (expotential backoff)
ΠΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ, ΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ "Ρ ΠΎΠ»ΠΎΡΡΡΠΌΠΈ", Ρ.ΠΊ. Ρ ΡΠ΅ΡΡΡΡΠ° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠ΅ΡΡΡΡ - Π²ΡΠΈΠ³ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½. ΠΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ. Π ΠΈΡΠΎΠ³Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ backoff. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Π·Π°ΡΡΠΏΠ°Π΅Ρ Π½Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ½Π° Ρ ΠΎΡΠΎΡΠ΅Π΅, ΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΠ½Π΅ΡΡΡ - Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ "ΡΠ°ΡΡΠ°ΡΡΠ²Π°Π΅ΠΌ" ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° ΡΠ΅ΡΡΡΡΠ΅, Π½Π°Π·Π½Π°ΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄Π°. ΠΠΎΡΠΎΠΊΠΈ, ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠΈΡΠ»Π°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΆΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ - ΡΠΏΡΡ. Expotential backoff - ΡΡΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΡΠΊΠ°ΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½Π΅ΡΠ΄Π°ΡΠ½ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ. ΠΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΠ°Π·ΠΎΠ² ΠΊΠ°ΠΊ ΡΠ²ΡΠΈΡΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ΡΠ΄Π°Ρ, ΡΠ΅ΠΌ ΡΠΈΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ ΠΎΠΊΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.
Π§ΡΠΎ ΡΡΠΎ Π·Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ β Β«reentrancyΒ»?
Reentrancy (ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅) - ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΡΠΆΠΈΡ Π»ΠΎΠΊ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π΅Π³ΠΎ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π·. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ ΡΠ΅Π±Π΅. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠΊ Π·Π°ΡΠΈΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«poison messageΒ»?
Poison messsage - ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΎΠΊ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΡΠΊΠ°ΡΠΈΠ²ΡΠ΅ΠΉΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ), Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠΈΠ΄Π΅ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π±ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΎ ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅. ΠΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«mutual exclusionΒ»? ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π² Java
Mutual exclusion - ΡΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ/ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ. Π Java ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ synchronized Π±Π»ΠΎΠΊΠ°, ReentrantLock
, ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ Π² 1 ΡΠ»Π΅ΠΌΠ΅Π½Ρ, spinloop Π½Π° volatile ΡΠ»Π°Π³Π΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ΅ CAS (Π½ΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π΅ ΠΎΠ± ΡΡΠ°ΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π°, Π° ΠΎΠ± ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ).
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«condition waitingΒ»? ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π² Java
Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π½Π΅ Π·Π½Π°Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°. ΠΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π²ΠΈΠ΄Ρ ΡΠΈΡΡΠ°ΡΠΈΡ,ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°), ΠΎΠ½ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½Π° Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΎΡΠ΄Π°Π΅Ρ Π»ΠΎΠΊ ΠΈ ΠΆΠ΄Π΅Ρ ΠΏΠΎΠΊΠ° Π½Π°ΡΡΡΠΏΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ (ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ). Π Java ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° wait
/notify
ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ° Condition
ΠΈ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² await
/signal
.
java.util.concurrent: ΠΡΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², Future
Π Π°Π·Π»ΠΈΡΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ Runnable ΠΈ Callable
Π Π°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Callable
Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Runnable
ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ΄ Π² Callable
ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π² Runnable
ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π² Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΡΠΌΠΎΠ΅.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ScheduledThreadPool ΠΏΠ΅ΡΠ΅Π΄ java.util.Timer
-
ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ
-
ΠΠ΅ ΡΠΌΠΈΡΠ°Π΅Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
-
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ² ΡΠ΅ΡΠ΅Π·
TimeUnit
. -
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Java, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ
Timer
ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎ Java 5.
ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Future/CompletableFuture β ΡΡΠΎ ΠΌΠΎΠ½Π°Π΄Π°. Π§ΡΠΎ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅?
ΠΡΠ»ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ Π΄ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠΎ ΠΌΠΎΠ½Π°Π΄Π° - ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π’ΠΎ Π΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΈ Π΄Π°Π»ΡΡΠ΅ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π£ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠ΅ΡΡΠ°Ρ
ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠΎΠ½Π°Π΄ΠΎΠΉ ΠΊΠ°ΠΊ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π½Π΅ ΠΈΠΌΠ΅Ρ Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. Future
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ½Π°Π΄ΠΎΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ΅Π±Ρ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Future
ΡΠΈΠΏΠΎΠΌ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π³ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· FutureTask
). Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ CompletableFuture
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΈΠ΅.
Π ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ForkJoinPool Π½Π°Π΄ ThreadPoolExecutor?
ForkJoinPool
Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ work-stealing Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ "ΠΊΡΠ°ΡΡΡ" Π·Π°Π΄Π°ΡΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΡΠΎΠΊΠ°Ρ
. ThreadPoolExecutor
ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ. ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π±Ρ ΡΠ°Π·Π±ΠΈΡΡ, ΡΠΎ Π²ΡΠ΅ Π΅Ρ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ, Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°ΡΡ Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ.
ΠΠ°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Ρ ScheduledThreadPool Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ThreadPoolExecutor?
ScheduledThreadPoolExecutor
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ ΠΈΠ»ΠΈ Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² scheduleAtFixedRate
ΠΈΠ»ΠΈ scheduleWithFixedDelay
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ. ThreadPoolExecutor
Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ ΡΡΠ°Π·Ρ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
Π ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² sheduleAtFixedRate() ΠΎΡ sheduleAtFixedDelay() ΠΊΠ»Π°ΡΡΠ° SheduledThreadPool?
sheduleAtFixedRate
Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄Π»ΠΈΠ½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ sheduleAtFixedDelay
ΡΡΠΈΡΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. Π’ΠΎ Π΅ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π·Π°ΠΏΡΡΠΊΠ° Π·Π°Π΄Π°Ρ, Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ.
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
Π‘ΠΌ. thread-pool-executor
java.util.concurrent: ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Producer/Consumer.
Π¨Π°Π±Π»ΠΎΠ½ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎ Π²ΠΈΠ΄Ρ ΠΈΡ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π°ΠΏΡΡΠΌΡΡ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ Π·Π½Π°ΡΡ Π΄ΡΡΠ³ ΠΎ Π΄ΡΡΠ³Π΅, Π½ΠΎ Π·Π½Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠΌΠ°Ρ ΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΡΠ³ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠ°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ: ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Master/Workers
Π¨Π°Π±Π»ΠΎΠ½ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠΈΡ . ΠΠ°ΡΡΠ΅Ρ-ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π°Π΄Π°ΡΠΈ, ΠΈΠ½ΠΈΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ Π½Π΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ - ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΠ»ΠΎΠ² Π² ΡΠ°ΠΉΠ»Π΅. ΠΠ°ΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π½Π° ΡΠ°ΡΡΠΈ, ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ°Π±ΠΎΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ² Π² ΡΡΠ°ΡΡΠΊΠ΅, Π° ΠΌΠ°ΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΡΡΡΠ°.
Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Pipes-and-Filters, SEDA
ΠΠΎΠ΄Ρ ΠΎΠ΄ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ/ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ΅Π½ΠΈΡ. Π ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π½Π° Π²Ρ ΠΎΠ΄, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ, ΠΈ Π²ΡΠ΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π° Π²ΡΡ ΠΎΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ ΠΎΠ±ΡΠΈΡ Π΄Π°Π½Π½ΡΡ . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°Π±ΠΎΡΡΡΡ unix-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ grep, awk, sed, sort ΠΈ Ρ.Π΄.
SEDA - ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΡΠΎΠΉ ΠΈΠ΄Π΅ΠΈ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎΠ΄Ρ ΠΎΠ΄ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΡΡΡ Π½Π΅ Π½Π°ΠΏΡΡΠΌΡΡ, Π° ΡΠ΅ΡΠ΅Π· ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠΎΡΠ»Π°Π½Π½ΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° ΡΡΠ°Π΄ΠΈΡΡ . ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ°Π΄ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π»ΡΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ Π·Π°ΡΡΡΡ ΡΠ»Π°Π±ΠΎΠΉ ΡΠ²ΡΠ·Π½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠ΅ΡΠ΅Π· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
Π§ΡΠΎ Π² SynchronousQueue ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ BlockingQueue
SynchronousQueue
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π’ΠΎ Π΅ΡΡΡ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π° "ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ": ΠΏΠΈΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ·Π°Π½ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΡΠΈΡΠ°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ size
Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½Π΅Ρ 0.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Β«ΡΠ°Π½Π΄Π΅Π²ΡΒ»? ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ°ΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π² Java Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ?
Β«Π Π°Π½Π΄Π΅Π²ΡΒ» - ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π²ΡΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΆΠ΄Π΅Ρ ΠΏΠΎΠΊΠ° Π²ΡΠΎΡΠΎΠΉ ΠΈΡ
Π½Π΅ Π·Π°Π±Π΅ΡΠ΅Ρ. Π Java ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Exchanger
, SynchronousQueue
, LinkedTransferQueue
.
ΠΠΎΡΠ΅ΠΌΡ TransferQueue ΠΠ BlockingQueue?
ΠΠΎΠΎΠ±ΡΠ΅-ΡΠΎ TransferQueue
ΡΠ²Π»ΡΠ΅ΡΡΡ BlockingQueue
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΏΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡ, ΡΠΎ TransferQueue
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠ°-ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ tryTransfer
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΠΊΠ»Π°ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.