рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЧрд▓рдд рд╢реЗрдпрд░рд┐рдВрдЧ

JRE рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦреЗрдВ, рдХрд╣реАрдВ рднреА рднрд╛рдЧрдирд╛ рдЖрджрд░реНрд╢ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИред

рдЪреМрдЦрдЯреЗ рдХреА рдПрдХ рдмрд╣реБрддрд╛рдпрдд рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдзреАрд░реЗ-рдзреАрд░реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд▓реБрдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдЬреАрд╡рди рдЕрдкрдирд╛ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИред

рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд╣реЛрддрд╛ рд╣реИред рдХреИрд╢ рдореЗрдореЛрд░реА рдХреЛ рдмреНрд▓реЙрдХ (рдХреИрд╢ рд▓рд╛рдЗрди) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Cache рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ (s) рдХреЗ рдмреАрдЪ рдХреИрд╢ рдореЗрдореЛрд░реА рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЭреВрдареА рд╕рд╛рдЭрд╛рдХрд░рдг рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдЬреЛ рдХреИрд╢ рдореЗрдореЛрд░реА рдХреЗ рд╕рдорд╛рди рдмреНрд▓реЙрдХ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЭреВрдареА рд╕рд╛рдЭрд╛рдХрд░рдг , рдЬрдм рдПрдХ рдЦрдВрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреИрд╢ рдЬреБрдЯрдирд╛ рддрдВрддреНрд░ рдкрд░ рднрд╛рд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕ рдкрд░ рд╡рд┐рд╡рд░рдг рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЙрдкрдХрд░рдг



рдЙрджрд╛рд╣рд░рдг


рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдереНрд░реЗрдбреНрд╕, рд╕рд╛рдорд╛рдиреНрдп рд╕рд░рдгреА рдореЗрдВ рдЕрдкрдиреЗ рд╕реЗрд▓ рд╕реЗ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп рд▓реЗрддреЗ рд╣реИрдВ, рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
public class SArray { //    volatile jvm  private static volatile long globalArray[] = new long[512]; public static class MThread implements Runnable { private int aPos; private long iterations; public MThread(long iterations, int aPos) { this.aPos = aPos; this.iterations = iterations; } @Override public void run() { for(long l = 0; l < iterations; ++l) { ++globalArray[aPos]; } System.out.printf("A:TID:%d, count: %d\n", Thread.currentThread().getId(), globalArray[aPos]); } } private static final int THREAD_COUNT = Runtime.getRuntime().availableProcessors(); private static final long ITERATIONS = 1870234052L; public static void main(String[] args) throws Throwable { Thread[] threads = new Thread[THREAD_COUNT]; long smillis = System.currentTimeMillis(); for(int i = 0; i < THREAD_COUNT; ++i) { threads[i] = new Thread(new MThread(ITERATIONS, i)); } for(Thread t: threads) { t.start(); } for(Thread t: threads) { t.join(); } System.out.printf("Total iterations on %d threads: %d, took %d ms\n", THREAD_COUNT, ITERATIONS, System.currentTimeMillis() - smillis); } } 


рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ jvm рдиреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдкрд░рд┐рдЪрдп рдирд╣реАрдВ рджрд┐рдпрд╛:
 java -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=print,SArray$MThread::run -XX:PrintAssemblyOptions=intel -cp target\falseshare-1.0-SNAPSHOT.jar SArray 

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
  0x0000000002350540: mov r11d,DWORD PTR [r13+0xc] 0x0000000002350544: mov r10d,DWORD PTR [r8+0x70] ;*getfield aPos ; - SArray$MThread::run@15 (line 18) 0x0000000002350548: mov r9d,DWORD PTR [r12+r10*8+0xc] ; implicit exception: dispatches to 0x00000000023505dd 0x000000000235054d: cmp r11d,r9d 0x0000000002350550: jae 0x0000000002350599 ;*laload ; - SArray$MThread::run@19 (line 18) 0x0000000002350552: shl r10,0x3 ; >>>> ;     0x0000000002350556: inc QWORD PTR [r10+r11*8+0x10] ;*goto ; - SArray$MThread::run@27 (line 17) 0x000000000235055b: add rbx,0x1 ; OopMap{r8=Oop r13=Oop off=127} ;*goto ; - SArray$MThread::run@27 (line 17) 0x000000000235055f: test DWORD PTR [rip+0xfffffffffddefa9b],eax # 0x0000000000140000 ;*goto ; - SArray$MThread::run@27 (line 17) ; {poll} 0x0000000002350565: cmp rbx,QWORD PTR [r13+0x10] 0x0000000002350569: jl 0x0000000002350540 ;*ifge 

рдЕрдЧрд░ GlobalArray рдЕрд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ jvm рд╣рд░ рдмрд╛рд░ рдореЗрдореЛрд░реА рд╕реЗ рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
  0x00000000021e0592: add rbx,0x1 ;*ladd ; - SArray$MThread::run@25 (line 17) ; >>>> ;   1         0x00000000021e0596: add r8,0x1 ;*ladd ; - SArray$MThread::run@21 (line 18) 0x00000000021e059a: mov QWORD PTR [r11+rcx*8+0x10],r8 ; OopMap{r11=Oop r13=Oop off=127} ;*goto ; - SArray$MThread::run@27 (line 17) 0x00000000021e059f: test DWORD PTR [rip+0xfffffffffe24fa5b],eax # 0x0000000000430000 ;*goto ; - SArray$MThread::run@27 (line 17) ; {poll} 0x00000000021e05a5: cmp rbx,r10 0x00000000021e05a8: jl 0x00000000021e0592 ;*ifge 


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЬрдм рдЧрдгрдирд╛ рдкрджреНрдзрддрд┐ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрдХреВрд▓рдХ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрдерд┐рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╛рд░реНрдо рдХрд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рд╖реНрдкрд╢реАрд▓ рд▓рдВрдмреЗ [] рд╕рд░рдгреА рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рд╕реВрдЪрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рд╕рд░рдгреА рдХреЛ, рдФрд░ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдирд╣реАрдВред

VTune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдореЗрдВ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рдЫрд╡рд┐

рд╣рдо рдЬреЗрдиреЗрд░рд┐рдХ рдПрдХреНрд╕рдкреНрд▓реЛрд░реЗрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрдирд╛рддреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рдЫрд╡рд┐

рд╕реАрдкреАрдЖрдИ - 2.100, рдирд┐рдкрдЯрд╛рди рдХрд╛рд░реНрдпреЛрдВ 1 рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рд╛рдеред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рдЫрд╡рд┐

рдЗрд╕рдореЗрдВ рдХрдВрдЯреИрдХреНрд╕реНрдб рдПрдХреНрд╕реЗрд╕ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдХреЛрд░ / рд╕реАрдкреАрдпреВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, GlobalArray рд╕рд░рдгреА рдХреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдПрдХ рдХреИрд╢ рд▓рд╛рдЗрди рдореЗрдВ рдЖрддреА рд╣реИрдВред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреИрд╢ рд▓рд╛рдЗрди рдХреЗ рдорд╛рди рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред Intel i5 рдкрд░, рдХреИрд╢ рд▓рд╛рдЗрди рдХрд╛ рдЖрдХрд╛рд░ 64 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рд▓рд╛рдЗрди рдмрджрд▓реЛ
  threads[i] = new Thread(new MThread(ITERATIONS, i)); 

рдкрд░
  threads[i] = new Thread(new MThread(ITERATIONS, (i + 1) * 8)); 

рдореИрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ * 8? рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЗрдбрд░ рдХреЗ рдмрд╛рдж рдкрд╣рд▓рд╛ рддрддреНрд╡ рд▓рдВрдмрд╛рдИ (рдлрд╝реАрд▓реНрдб рд▓рдВрдмрд╛рдИ) рд╣реИред рдПрд▓рд┐рдореЗрдВрдЯ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП, jvm рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлреАрд▓реНрдб рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
Vtune рдореЗрдВ reanalysis рдЪрд▓рд╛рдПрдБ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рдЫрд╡рд┐

CPI - 0.586, рдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд░рдирдЯрд╛рдЗрдо CPI рдХреЗ рд╕рд╛рде рдЖрдиреБрдкрд╛рддрд┐рдХ рд░реВрдк рд╕реЗ 13.7 рд╕реЗ 4.5 рд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдПрдХрд▓-рдкреНрд░реЛрд╕реЗрд╕рд░ рдорд╢реАрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреИрд╢ рдореЗрдореЛрд░реА рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣реЛрд╕реНрдЯрдкреЙрдЗрдВрдЯ рдЬреЗрд╡реАрдПрдо рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ (рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде) 16 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧреАред рдмреНрд▓реИрдХрд╣реЛрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЭреВрдареА рд╕рд╛рдЭрд╛рдХрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ jmh рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ - рд╕рднреА рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдереЛрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рди рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╕рдордп рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлреИрд▓рд╛рдПрдВред

рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i5 3.3 GHz рдкреНрд░реЛрд╕реЗрд╕рд░, 64 рдмрд┐рдЯ JDK 1.7.0_21, Intel Vtune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ XE 2013 рдЕрдкрдбреЗрдЯ 11 (рдмрд┐рд▓реНрдб 300544) рдореВрд▓реНрдпрд╛рдВрдХрди рд▓рд╛рдЗрд╕реЗрдВрд╕, рд╡рд┐рдВрдбреЛрдЬ 7 64 рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рдорд╢реАрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдкреБрдирд╢реНрдЪред рд▓реЗрдЦ рдореЗрдВ рджрд┐рдП рдЧрдП рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЖрдВрдХрдбрд╝реЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рд╣рдж рддрдХ рдмрд╛рд╣рд░реА рдХрд╛рд░рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╕реЗ рдУрдПрд╕ рдЬреЗрд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ (рдХреЛрд░) рдХреЗ рдХреЛрд░ рдХреЗ рдмреАрдЪ рдереНрд░реЗрдбреНрд╕ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

Source: https://habr.com/ru/post/In187752/


All Articles