Π Π°Π·Π½ΠΎΠ΅

Java ΠΏΠΎΡ‚ΠΎΠΊΠΈ синхронизация: Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° класса

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠšΡƒΡ€Ρ «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java»

Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ всСгда ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π‘Ρ‹Π²Π°Π΅Ρ‚, ΠΎΠ½ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ взаимодСйствия Π½ΠΈΡ‚Π΅ΠΉ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ мСшали Ρ€Π°Π±ΠΎΡ‚Π΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Один ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± измСнСниях, внСсСнных Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² – это настройка ΠΈΡ… взаимодСйствия. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ:

public class NoSynch {
    public static void main(String[] args) 
           throws InterruptedException {
        Client client = new Client(1000);
        Thread operation = 
                  new Operation(client, 1000);
        Thread operation1 = 
                  new Operation(client, 500);
        operation.start();
        operation1.start();
        operation.join();
        operation1.join();
        System. out.println(client.getBill());
    }
}
 
class Operation extends Thread {
    private Client mClient;
    private int mPay;
 
    Operation(Client client, int pay) {
        mClient = client;
        mPay = pay;
    }
 
    @Override
    public void run() {
        System.out.println(this.getName() + 
                   ": " + mClient.getBill());
        if (mClient.getBill() - mPay >= 0) {
            try {
                sleep(1000);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            mClient.changeBill(mPay);
        }
        System.out.println(this.getName() + 
                    ": " + mClient.getBill());
        System.out.println(this.getName() + " stop");
    }
}
 
class Client {
    private int mBill;
 
    Client(int bill) {
        this.mBill = bill;
    }
 
    int getBill() {
        return mBill;
    }
 
    void changeBill(int pay) {
        mBill -= pay;
    }
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Thread-0: 1000
Thread-1: 1000
Thread-0: 0
Thread-0 stop
Thread-1: -500
Thread-1 stop
-500

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° sleep’ΠΎΠΌ искусствСнно Π½Π°Π΄ΡƒΠΌΠ°Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ условия ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ дСйствиСм ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ…, Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся врСмя.

Π£ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° счСту оказалась ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ сумма, хотя ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ Π²Π΅Ρ‰Π΅ΠΉ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вычитания Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (mClient.getBill() - mPay >= 0) Π±Ρ‹Π»ΠΎ ΠΏΠΎ 1000 Π½Π° счСту. И ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ «Ρ€Π΅ΡˆΠΈΠ»», Ρ‡Ρ‚ΠΎ Π΄Π΅Π½Π΅Π³ достаточно. ПослС этого ΠΏΠΎΡ‚ΠΎΠΊ-0 ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ» сумму. Когда ΠΏΠΎΡ‚ΠΎΠΊ-1 приступил ΠΊ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΡŽ, Π΄Π΅Π½Π΅Π³ Π½Π° счСту ΡƒΠΆΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½Π°Π΄ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ client, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ° ΠΎΠ½ обрабатываСтся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π² run():

class Operation extends Thread {
    private final Client mClient;
    private int mPay;
 
    Operation(Client client, int pay) {
        mClient = client;
        mPay = pay;
    }
 
    @Override
    public void run() {
        System. out.println(this.getName() + 
                   ": " + mClient.getBill());
        synchronized (mClient) {
            if (mClient.getBill() - mPay >= 0) {
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                mClient.changeBill(mPay);
            }
        }
        System.out.println(this.getName() + 
                   ": " + mClient.getBill());
        System.out.println(this.getName() + " stop");
    }
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Thread-0: 1000
Thread-1: 1000
Thread-0: 0
Thread-0 stop
Thread-1: 0
Thread-1 stop
0

И хотя ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° сначала ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ 1000. Когда Π½Π°Ρ‡Π°Π»Π°ΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅, дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ совмСстно, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² это врСмя доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½Π΅ ΠΈΠΌΠ΅Π».

Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом synchronized ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ синхронизация Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’ Java Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° синхронизация ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Ρ‚. Π΅. ΠΏΠΎΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ½ нСдоступСн. Если Π² Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ синхронизируСм ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getBill() ΠΈ changeBill() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, это Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ даст. РСшСниСм ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСниС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ вычитания Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄:

class Operation1 extends Thread {
    private Client1 mClient;
    private int mPay;
    Operation1(Client1 client, int pay) {
        mClient = client;
        mPay = pay;
    }
 
    @Override
    public void run() {
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        mClient.changeBill(mPay);
    }
}
 
class Client1 {
    private int mBill;
    Client1(int bill) {
        this.mBill = bill;
    }
 
    synchronized void changeBill(int pay) {
        System.out.println(mBill);
        if (mBill-pay >= 0) {
            mBill -= pay;
            System.out.println(mBill);
        }
    }
}

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π΅ΡΡ‚ΡŒ собствСнный кэш, ΠΊΡƒΠ΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ΄Π½Π° Π½ΠΈΡ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ измСнСния, Π° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ значСния ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ памяти. Если ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² кэш, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile. НапримСр:

private volatile int mBill;

Бинхронизация ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ² Java (Π Π°Π·Π½Ρ‹Π΅ Π‘Ρ‚Π΅ΠΊΠΈ)

нСстатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах Π² памяти для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π­Ρ‚ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ, поэтому ΠΎΡ‚Π²Π΅Ρ‚ Π½Π°

Ссли ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт ΠΏΠΎΡ‚ΠΎΠΊ, содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ класса v1, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный «ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€» v1 (Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс памяти), ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ «ΠΊΠΎΡΠ½ΡƒΡ‚ΡŒΡΡ» Π΅Π³ΠΎ… Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ

— Π½Π΅Ρ‚. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ это зависит ΠΎΡ‚ программиста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π½Π΅ повлияло Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Π° класса ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Π² памяти для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, Π° Π½Π΅ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Ρ€ΡŒΠ΅Ρ€Π°ΠΌΠΈ памяти (ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Π½Π°Ρ‡Π°Π»Π΅ { ΠΈ ΠΊΠΎΠ½Ρ†Π΅ } of synchronized), Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ кСш состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ язык, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ хранСния Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ΅. «ΠŸΠ°ΠΌΡΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°» — это Π΅Π³ΠΎ стСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ содСрТит элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° * — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± этом Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΡƒΡ‡Π΅ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ мСсто Π² ΠΊΡƒΡ‡Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись с использованиСм этой памяти Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя.

Π― Π²ΠΈΠΆΡƒ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сдСлали, Ссли ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях ΠΊΡƒΡ‡ΠΈ. Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… JVM Π΅ΡΡ‚ΡŒ оптимизация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ распрСдСлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ°-Π½ΠΈΡ‚ΠΈ, Π½ΠΎ это Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ распрСдСлСниС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Если Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 1, ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ heapStart быстро станСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ·ΠΊΠΈΠΌ мСстом concurrency, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ распрСдСлСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‰ΡƒΡŽ это ΠΏΠΎΠ»Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ JVM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ-Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ распрСдСлСния, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ распрСдСляСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ ΠΈ запросов Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ запросы обслуТивания ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· этого ΠΏΠΎΡ‚ΠΎΠΊΠ°-локального Π±Π»ΠΎΠΊΠ°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ количСство Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΊΡƒΡ‡ΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ concurrency.

* — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ оптимизация JVM позволяСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² стСкС.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронизация Java?

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. МногиС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВсС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, извСстный ΠΊΠ°ΠΊ основной ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся JVM ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ main() вызываСтся с основным ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ свои собствСнныС рСгистры, стСк ΠΈ сСгмСнт ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ процСсса (процСсс прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ?

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ — это процСсс ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Β«ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Β» выполнСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… вмСстС для выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ. КаТдая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ управлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ зависит ΠΎΡ‚ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ….

Бинхронизация Π² Java

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС синхронизация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ доступа ΠΊ рСсурсам, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Одним ΠΈΠ· прСимущСств использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполняСтся асинхронно. БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ситуаций, ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. НапримСр, Π² систСмС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ обновлял запись Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ пытался Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π’ этих случаях ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ рСсурс Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π·Π° Ρ€Π°Π·. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ рСсурсу Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ дСйствиях Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Java позволяСт Π²Π°ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дСйствия Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с использованиСм синхронизированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ синхронизированных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ, осущСствляСтся посрСдством использования синхронизированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом synchronized. Волько ΠΎΠ΄ΠΈΠ½ синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ позволяСт ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΎΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ синхронизированного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

Бинтаксис

synchronized(objectidentifier) {
// Доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ рСсурсам
}

synchronized(objectidentifier) {

Β Β  // Доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ рСсурсам

}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ objectidentifier являСтся ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ связана с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой синхронизированный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Π―Π·Ρ‹ΠΊ программирования Java прСдоставляСт Π΄Π²Π΅ основныС ΠΈΠ΄ΠΈΠΎΠΌΡ‹ синхронизации: синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ синхронизированныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ синхронизированныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹?

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ прСдотвращСния ΠΏΠΎΠΌΠ΅Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ошибок согласованности памяти: Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²ΠΈΠ΄Π΅Π½ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, всС считывания ΠΈΠ»ΠΈ записи Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синхронизированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². НСвозмоТно Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² синхронизированных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Когда ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт синхронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π±Π»ΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ синхронизированноС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² Π΅Π³ΠΎ объявлСниС:

public synchronized void increament(){
count++;
}

public synchronized void increament(){

Β Β Β Β count++;

}

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ обСспСчиваСт Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ связки ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π°. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса ΠΈΠ»ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Ρ‹Π»Π° синхронизирована с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ синхронизированный Π±Π»ΠΎΠΊ.

public void add(int value){
synchronized(this){
this.count += value;
}
}

public void add(int value){

Β Β synchronized(this){

Β Β Β Β  this.count += value;

Β Β }

}

Одно сущСствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ синхронизированным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ объСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объСм Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, всСгда Π»ΡƒΡ‡ΡˆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ критичСский Ρ€Π°Π·Π΄Π΅Π» ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, синхронизированный Π±Π»ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Java.lang.NullPointerException, Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, прСдоставлСнноС Π±Π»ΠΎΠΊΡƒ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null, Ρ‡Ρ‚ΠΎ Π½Π΅ соотвСтствуСт синхронным ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: http://net-informations. com/Java/cJava/synchronization.htm

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈ синхронизация — ni0xx

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Если нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ измСняСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰Π΅ΠΉ синхронизации, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сломана. Π•ΡΡ‚ΡŒ 3 способа это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ:

  • Π½Π΅ ΡˆΠ°Ρ€ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ
  • ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ нСизмСняСмой
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ всСгда, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ доступ

Класс являСтся ΠΏΠΎΡ‚ΠΎΠΊΠΎ-бСзопасным Ссли ΠΎΠ½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ сСбя Π²Π΅Π΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², нСзависимо ΠΎΡ‚ расписания ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ выполнСния этих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² срСдС выполнСния, ΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ синхронизации ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ со стороны Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ (Atomicy)

АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π»ΠΈΠ±ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ вовсС.
Атомарная опСрация — это Ρ‚Π° опСрация, которая являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сСбя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ состоянии.

ΠšΠ»Π°ΡΡΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎ-бСзопасныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ находятся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅
java.util.concurrent.atomic

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (Locking)

synchronized ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ( == synchronized(this) {} ΠΈΠ»ΠΈ вмСсто this -> class для static )
syncronized Π±Π»ΠΎΠΊΠΈ

БовмСстноС использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ
public class NoVisibility {
    private static boolean ready;
    private static int number;
    private static class ReaderThread extends Thread {
        public void run() {
            while (!ready)
                Thread.yield();
            System.out.println(number);
        }
}
    public static void main(String[] args) {
        new ReaderThread().start();
        number = 42;
        ready = true;
} }

NoVisibility ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ready ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΎΠΉ для ReaderThread.
Π”Π°ΠΆΠ΅ NoVisibility ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти 0, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ запись Π² ready ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ для readerthread Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ записи Π² number. Π­Ρ‚ΠΎ явлСниС извСстно ΠΊΠ°ΠΊ reodering.
НС сущСствуСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π² порядкС, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΠΎΠΊΠ° ΠΈΡ… порядок Π½Π΅ обнаруТиваСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π΄Π°ΠΆΠ΅ Ссли ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ (Stale data)

ΠŸΡ€ΠΈ доступС ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° , Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ jvm. Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile .

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΠΎΡ‚Π΅Ρ€Ρ this Π² конструкторС
ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² конструкторС сущСствуСт ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ,
Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° построСнный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π½Π΅ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ полями

Π’Π΅Ρ…Π½ΠΈΠΊΠ° ограничСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π² объявлСнии (Ad-hoc Thread Confinement) Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ интСрфСйса ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ — ΠŸΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΎ синхронизации Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°/ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ‚ΠΎΡ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Swing)
  • ИспользованиС стэка (Stack Confinement) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… экзСмпляров Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°(ΠΎΠ²)
  • ИспользованиС ThreadLocal
private static ThreadLocal<Connection> connectionHolder
    = new ThreadLocal<Connection>() {
        public Connection initialValue() {
            return DriverManager. getConnection(DB_URL);
} };
public static Connection getConnection() {
    return connectionHolder.get();
}

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ свой Connection

<back

ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ (Immutability)

НСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всСгда ΠΏΠΎΡ‚ΠΎΠΊΠΎ-бСзопасны
ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ измСняСм Ссли:

  • Π•Π³ΠΎ состояниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ послС создания
  • ВсС Π΅Π³ΠΎ поля ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ final
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ создан (Π½Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ this Π² конструкторС)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ бСзопасно, ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасно ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ статичСского ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ volatile поля ΠΈΠ»ΠΈ AtomicReference
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² final ΠΏΠΎΠ»Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ построСнного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; ΠΈΠ»ΠΈ
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠΎΠ»Π΅, Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (синхронизациСй)
БоставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Composing objects)

ΠŸΡ€ΠΎΡ†Π΅ΡΡ проСктирования ΠΏΠΎΡ‚ΠΎΠΊΠΎ-бСзопасногоо класса Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ 3 основных элСмСнта:

  • ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ состояния
  • Π—Π°Π΄ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ управлСния ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌ доступом ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π˜Π·Π±Π΅Π³Π°Ρ‚ΡŒ синхронизации (это) Π² Java?

Мои Π΄Π²Π° Ρ†Π΅Π½Ρ‚Π° Π² 2019 Π³ΠΎΠ΄Ρƒ, хотя этот вопрос ΡƒΠΆΠ΅ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Β«thisΒ» — это Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, Π½ΠΎ Π·Π° сцСной стоит Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Β«thisΒ» (Ρ‡Ρ‚ΠΎ, ΠΊ соТалСнию, позволяСт синхронизированноС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°).

Если Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ вашСго класса ΠΌΠΎΠ³Π»ΠΈ Β«ΡƒΠΊΡ€Π°ΡΡ‚ΡŒΒ» Π²Π°ΡˆΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠΌΠ΅Π»ΠΈ с Π½Π΅ΠΉ Π΄Π΅Π»ΠΎ), ​​вы Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ, ΠΏΠΎΠΊΠ° Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ синхронизации, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΌ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ вашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ это).

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Β«ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅Β» (ΠΈΠ»ΠΈ «тСряСтС»), Ссли Π²Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ (Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Β«ΡƒΠΊΡ€Π°ΡΡ‚ΡŒΒ» Π²Π°ΡˆΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). ..).

Для мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово synchronized Π² сигнатурС опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° позволяСт программистам слишком Π»Π΅Π³ΠΊΠΎ Π½Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎ Ρ‡Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

НСльзя ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Β«ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΒ» Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ вашСго класса ΠΌΠΎΠ³Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ Β«ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΒ» Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ . .. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚Π΅. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ большого ΠΏΠ°Π»ΡŒΡ†Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования.

Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, устройство ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ люди ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ссли ΠΎΠ½ΠΈ Π½Π΅ хотят, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π»ΠΈΡΡŒ.

Если ваша Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° доступна Π²Π½Π΅ класса ΠΈΠ»ΠΈ Π½Π΅Ρ‚, это вашС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ программиста, исходя ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности Π΅ΡΡ‚ΡŒ Π² классС. Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ API. НапримСр, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΡ‚ синхронизированного (этого) ΠΊ синхронизированному (provateObjet), Π½Π΅ рискуя Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ измСнСния Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 1: я знаю, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ синхронизируСтся (это) «достигаСт», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ явный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ выставляя Π΅Π³ΠΎ, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ссли вашС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ Π²Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Β«thisΒ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 2: я Π½Π΅ согласСн с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄ случайно ΡƒΠΊΡ€Π°Π» Π²Π°ΡˆΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, это ошибка, ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС это Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ я ΠΌΠΎΠ³Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС ΠΌΠΎΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для публичности. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ «случайно» Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, это ошибка. Π—Π°Ρ‡Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ эту Π°Π²Π°Ρ€ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ !!! Если ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΡƒΠΊΡ€Π°ΡΡ‚ΡŒ ваш Π·Π°ΠΌΠΎΠΊ — ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° для вашСго класса, Π½Π΅ позволяйтС это. Π’Π°ΠΊ просто.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java | Π‘Π»ΠΎΠ³ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ Java

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ особого Ρ‚ΠΈΠΏΠ° ошибок, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ многозадачностии Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, которая происходит Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ исполнСния ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΏΠ°Ρ€Ρ‹ синхронизированных ΠΎΠ±ΡŠΠ΅ΠΊΒ­Ρ‚ΠΎΠ².

Допустим, ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ исполнСния Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π₯, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — Π² ΠΌΠΎΒ­Π½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π£. Если ΠΏΠΎΡ‚ΠΎΠΊ исполнСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π₯ попытаСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ любой син­хронизированный ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π£, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ Deadlock, взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Java, взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Java ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΡƒΡ€ΠΎΠΊ взаимная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π² Java
|

|

Π’ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ API поддСрТиваСтся срСдство, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ исполнитСлСм ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для создания ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² исполнСния ΠΈ управлСния ΠΈΠΌΠΈ.

Π’ этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ слуТит Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ исполнС­ния срСдствами класса Thread. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ Java Executor ΡƒΡ€ΠΎΠΊΠΈ, Java ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Executor ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ java ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹
|

|

Π’ вСрсии JDК 7 Π²Π½Π΅Π΄Ρ€Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ класс синхронизации ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Phaser. Π“Π»Π°Π²Π½ΠΎΠ΅ Π΅Π³ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ исполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Β­ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько стадий (ΠΈΠ»ΠΈ Ρ„Π°Π·) выполнСния дСйствия. НапримСр, Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² исполнСния, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Ρ€ΠΈ стадии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°ΠΊΠ°Π·ΠΎΠ².

На ΠΏΠ΅Ρ€Π²ΠΎΠΉ стадии ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ исполнС­ния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свСдСния ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π½Π° складС ΠΈ Π΅Π³ΠΎ Ρ†Π΅Π½Ρƒ. По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ этой стадии ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° исполнСния, Π³Π΄Π΅ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ стадии вычисляСтся ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ доставки ΠΈ сумма ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π»ΠΎΠ³Π°, Π° Π½Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стадии подтвСрТдаСтся ΠΎΠΏΠ»Π°Ρ‚Π° ΠΈ опрСдСляСтся ΠΎΡ€ΠΈΒ­Π΅Π½Ρ‚ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ΅ врСмя доставки.

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ для синхронизации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΒ­ΠΊΠΎΠ² исполнСния Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΠΎΡ‚Ρ€ΡƒΠ΄ΠΈΡ‚ΡŒΡΡ. А с появлСниСм класса Phaser этот процСсс Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростился. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Класс Phaser Π² Java, Класс Phaser Java, Класс Phaser ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Java
|

|

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² исполнСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ исполнСниС ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ВСорСтичСски вы­сокоприоритСтныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ исполнСния ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ЦП, Ρ‡Π΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΒ­ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅.

А Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ЦП, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ сполнСния, Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, Π½ΠΎ ΠΈ ΠΎΡ‚ ряда Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². ( НапримСр, особСнности Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ многозадачности Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС Π½Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ЦП. ). Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Java, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java
|

|

ВСроятно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсным с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синхронизации являСтся класс Exchanger, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для упрощСния процСсса ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ исполнСния.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия класса Exchanger ΠΎΡ‡Π΅Π½ΡŒ прост: ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ° исполнСния Π½Π΅ Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ exchange(). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹Β­ΠΌΠΈ, прСдоставляСмыми ΠΎΠ±ΠΎΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ изящСн, Π½ΠΎ ΠΈ прост Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ Exchanger, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ java, синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java
|

|

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ситуации, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΈΠ»ΠΈ большС ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ оТидания Π² ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ исполнС­ния Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ достигнут Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Для этой Ρ†Π΅Π»ΠΈ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ API прСдоставляСтся класс CyclicBarrier. Он позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приостанавливаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² исполнСния Π½Π΅ достигнСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ CyclicBarrier, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ java, синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java
|

|

Иногда трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊ исполнСния находился Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ оТидания Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ наступит ΠΎΠ΄Π½ΠΎ (ΠΈΠ»ΠΈ большС) событиС.

Для этих Ρ†Π΅Π»Π΅ΠΉ Π² ΠΏΠ°Ρ€Π°Π»Β­Π»Π΅Π»ΡŒΠ½ΠΎΠΌ API прСдоставляСтся класс CountDownLatch, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ самоблокировку с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ отсчСтом. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ этого класса ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ создаСтся с количСством событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ снята самоблокировка. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит событиС, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика достигнСт нуля, самоблокировка Π±ΡƒΠ΄Π΅Ρ‚ снята. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ CountDownLatch, java ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ java, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Java
|

|

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ сразу ΠΆΠ΅ распознаваСмым срСди ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации являСтся сСмафор, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² классС Semaphore.

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ управляСт доступом ΠΊ ΠΎΠ±Ρ‰Π΅Β­ΠΌΡƒ рСсурсу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ счСтчика. Если счСтчик большС нуля, доступ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ,Π° Ссли ΠΎΠ½ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ Π² доступС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Π½ΠΎ.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ этот счСтчик подсчитываСт Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ,Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ рСсурсу, ΠΏΠΎΡ‚ΠΎΠΊ исполнСния Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρƒ сСмафора Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° доступ. Π§ΠΈΡ‚Π°Ρ‚ΡŒ β†’

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Java
|

ΠœΠ΅Ρ‚ΠΊΠΈ Semaphore Java ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, Semaphore Π² языкС Java, рСализация сСмафора Π² Java
|

|

РСализация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Java

ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π² Java 21 дСкабря, 2014

Π§Π΅Ρ€Π΅Π· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ модСль Java прСдставлСны Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ свойства, связанныС с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Вся ΠΏΡ€Π΅Π»Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ рСализуСтся Ρ‡Π΅Ρ€Π΅Π· класс Thread. Π£ класса Π΅ΡΡ‚ΡŒ нСсколько статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ пСрСчислСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1.1.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
Β getId()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° возвращаСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Β getName()Β ΠœΠ΅Ρ‚ΠΎΠ΄ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вызываСтся этот ΠΌΠ΅Ρ‚ΠΎΠ΄.
Β getPriority()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Β getThreadGroup()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π² качСствС значСния возвращаСтся Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.
Β holdsLock()Β ΠœΠ΅Ρ‚ΠΎΠ΄ Π² качСствС значСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ true, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ рСсурса ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈ нСдопущСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ обращСния ΠΊ рСсурсу Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для синхронизации Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
Β interrupt()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ выполняСтся ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°
Β isAlive()Β ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ.
Β join()Β ΠœΠ΅Ρ‚ΠΎΠ΄-инструкция оТидания Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°.
Β run()Β ΠœΠ΅Ρ‚ΠΎΠ΄ опрСдСляСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° задаСтся ΠΏΡƒΡ‚Π΅ΠΌ пСрСопрСдСлСния этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
Β setName()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ задаСтся имя ΠΏΠΎΡ‚ΠΎΠΊΠ°(имя ΠΏΠΎΡ‚ΠΎΠΊΠ° указываСтся Π² Π²ΠΈΠ΄Π΅ тСкстовой строки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°).
Β setPriority()Β ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ задаСтся ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°(ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ пСрСдаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ).
Β sleep()Β ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для приостановки выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°. ВрСмя(Π² миллисСкундах), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСтся приостановка Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, указываСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
Β start()Β ΠœΠ΅Ρ‚ΠΎΠ΄ для запуска ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° автоматичСски запускаСтся Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ run(), ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π² интСрфСйсС Runnable.
Β wait()Β ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания.
Β yield()Β ΠœΠ΅Ρ‚ΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ приостанавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π—Π΄Π΅ΡΡŒ слСдуСт Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пояснСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выполнСния ΠΈ Π½Π΅ выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ(ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ), Ρ‚ΠΎ, ΠΊΠ°ΠΊ говорится, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π’ Ρ‚ΠΎΠΌ случаС, Ссли Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² процСссС выполнСния Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² части доступа ΠΊ систСмным рСсурсам, Π² расчСт принимаСтся Ρ‚Π°ΠΊΠΎΠΉ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” это число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт Β«Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒΒ» этого ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π½Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ, Π²Π°ΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ большС. Π’ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹ΡˆΠ΅, Π² случаС Β«ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° интСрСсов» ΠΈΠΌΠ΅Π΅Ρ‚ прСимущСство. ΠŸΠΎΡ‚ΠΎΠΊ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ бСсповоротного Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° приостанавливаСтся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° возобновляСтся. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ являСтся синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π’Π΅Π΄ΡŒ Π² процСссС выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚(ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΊ ΠΈ происходит) ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ рСсурсам. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ этом Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. Π Π΅ΡˆΠ°ΡŽΡ‚ΡΡ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

Leave a Reply

По ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ «синхронизированный» Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… интСрфСйса Java 8?

Π₯отя сначала ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ synchronized Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, оказалось, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ опасно ΠΈ поэтому Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ.

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ — это сокращСниС для ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Π΅Ρ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ всС Ρ‚Π΅Π»ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Π±Π»ΠΎΠΊ synchronized , ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ эту сСмантику ΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ; Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², это Ρ‚ΠΎΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра с ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ. (ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ synchronized — это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ синтаксичСская оптимизация; ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΎΠ½ΠΈ просто Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹, Ρ‡Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ synchronized . Π•ΡΡ‚ΡŒ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»Π° прСТдСврСмСнная синтаксичСская оптимизация Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ мСсто, ΠΈ Ρ‡Ρ‚ΠΎ синхронизированныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ большС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‡Π΅ΠΌ Ρ€Π΅ΡˆΠ°ΡŽΡ‚, Π½ΠΎ этот ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΎΡ‚ΠΏΠ»Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°Π²Π½ΠΎ.)

Π˜Ρ‚Π°ΠΊ, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ опасны? Бинхронизация — это Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° — это координация ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступа ΠΊ измСняСмому ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ.Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° синхронизации, которая опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ состояния. (Π‘ΠΌ. Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Ρ€Π°Π·Π΄Π΅Π» 2.4.)

МногиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² качСствС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ синхронизации Java Monitor Pattern (JCiP 4.1), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° охраняСтся Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Π’ этом шаблонС Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ волшСбного ΠΈΠ»ΠΈ особСнного, Π½ΠΎ ΠΎΠ½ ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΈ использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова synchronized Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… нСявно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ этот шаблон.

Π­Ρ‚ΠΎ класс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ состояниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ синхронизации этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Но интСрфСйсы Π½Π΅ Π²Π»Π°Π΄Π΅ΡŽΡ‚ состояниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΡΠΌΠ΅ΡˆΠ°Π½Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, использованиС синхронизированного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² интСрфСйсС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ синхронизации, Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρƒ вас Π½Π΅Ρ‚ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Ρ… оснований ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, поэтому Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ использованиС синхронизации Π½Π΅ обСспСчиваСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ выполняСтС ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ).Π­Ρ‚ΠΎ даст Π²Π°ΠΌ Π»ΠΎΠΆΠ½ΠΎΠ΅ чувство увСрСнности Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлали с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ сообщСниС ΠΎΠ± ошибкС Π½Π΅ сообщит Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ синхронизации.

Π£ΠΆΠ΅ достаточно слоТно постоянно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ синхронизации для ΠΎΠ΄Π½ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°; Π΅Ρ‰Π΅ слоТнСС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ подкласс ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ придСрТиваСтся ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ синхронизации, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΅Π³ΠΎ супСрклассом. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°ΠΊΠΈΠΌΠΈ слабо связанными классами (интСрфСйсом ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, мноТСством классов, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° ошибкам.

Учитывая всС эти Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΊΠ°ΠΊΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚? ΠŸΠΎΡ…ΠΎΠΆΠ΅, ΠΎΠ½ΠΈ Π² основном ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ интСрфСйсы Π²Π΅Π»ΠΈ сСбя ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π₯отя это Π²ΠΏΠΎΠ»Π½Π΅ объяснимоС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ являСтся ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ интСрфСйса, Π° Π½Π΅ Β«Π§Π΅Ρ€Ρ‚Ρ‹ -Β». ΠœΡ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π΄Π²ΡƒΡ… Ρ†Π΅Π»Π΅ΠΉ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ основной Ρ†Π΅Π»ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π°.

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ

Java | Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Synchronized ArrayList ΠΈ CopyOnWriteArrayList

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Java | Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Synchronized ArrayList ΠΈ CopyOnWriteArrayList

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ArrayList Π½Π΅ синхронизирован, Ссли нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ArrayList ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, синхронизация ArrayList Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для обСспСчСния бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС.

Π­Ρ‚Ρƒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Arraylist ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ двумя способами:

  1. ИспользованиС Collections. synchronizedList ()
  2. ИспользованиС CopyOnWriteArrayList (COWAL).

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обСспСчСния бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Arraylist, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ COWAL, Π° ΠΊΠΎΠ³Π΄Π° — Collection.synchronizedList (). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, поняв различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ синхронизированными ArrayList ΠΈ CopyOnWriteArrayList Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΈ способах обСспСчСния бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΠΎΡ‡Π΅ΠΌΡƒ CopyOnWriteArrayList появился, ΠΊΠΎΠ³Π΄Π° Collection.synchronizedList () ΡƒΠΆΠ΅ присутствовал

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ SynchronizedList использовался Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, Π½ΠΎ ΠΈΠΌΠ΅Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния. ВсС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ чтСния ΠΈ записи Π±Ρ‹Π»ΠΈ синхронизированы с самим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ списка, Ρ‚.Π΅. Ссли ΠΏΠΎΡ‚ΠΎΠΊ выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ add (), ΠΎΠ½ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» доступ ΠΊ элСмСнтам Π² спискС.ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ элСмСнтов списка Π·Π° Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ нСэффСктивно. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ довольно ТСстко.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π°ΡΡŒ Π±ΠΎΠ»Π΅Π΅ гибкая систСма сбора, которая позволяСт:

  1. НСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния.
  2. Один ΠΏΠΎΡ‚ΠΎΠΊ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ чтСния, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
  3. Волько ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π² Java 5 Π±Ρ‹Π» прСдставлСн Π½ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Concurrent Collections , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΎ CopyOnWriteArrayList .Класс CopyOnWriteArrayList Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записи ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ чтСния.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ:

  1. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ вСсь список, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈΠ»ΠΈ записи, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ CopyOnWriteArrayList Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ вСсь список Π²ΠΎ врСмя этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

    Класс CopyOnWriteArrayList Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² соотвСтствии со своим ΠΈΠΌΠ΅Π½Π΅ΠΌ i.Π΅. ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ записи , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ дСйствия для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈ записи. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи (добавлСния, установки, удалСния ΠΈ Ρ‚. Π”.) Он создаСт Π½ΠΎΠ²ΡƒΡŽ копию элСмСнтов Π² спискС. Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния (get, iterator, listIterator ΠΈ Ρ‚. Π΄.) ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, ΠΈ Π΅Π΅ опСрация чтСния выполняСтся быстрСС, Ρ‡Π΅ΠΌ Collections.SynchronizedList (). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, COWAL Π»ΡƒΡ‡ΡˆΠ΅ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния, Ρ‡Π΅ΠΌ синхронизированный список.

  2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи: Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π² ArrayList, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи COWAL ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ для ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.synchronizedList (), , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Re-entrantLock. ΠœΠ΅Ρ‚ΠΎΠ΄ записи всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ копию ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ массива ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² копию, Π° Π·Π°Ρ‚Π΅ΠΌ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΡƒΡŽ ссылку массива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° этот Π½ΠΎΠ²Ρ‹ΠΉ массив. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи CopyOnWriteArrayList ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Collections.synchronizedList ().
  3. ПовСдСниС Π²ΠΎ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ: Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список — это отказоустойчивый ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ , Ρ‚.Π΅.Π΅. ΠΎΠ½ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ConcurrentModifcationException, ΠΊΠΎΠ³Π΄Π° список измСняСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎ Π½Π΅ΠΌΡƒ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ CopyOnWriteArrayList являСтся отказоустойчивым ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ConcurrentModifcationException, Π΄Π°ΠΆΠ΅ Ссли список измСняСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ повторяСт Π΅Π³ΠΎ.
  4. Число Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: Волько ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с синхронизированным списком, блокируя ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ списка, Ρ‡Ρ‚ΠΎ влияСт Π½Π° Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² случаС COWAL , нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ArrayList , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ обновлСния / измСнСния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ быстрСС .
  5. Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°: Π’ΠΎ врСмя ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π² синхронизированном спискС ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ итСрация выполняСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ синхронизированного Π±Π»ΠΎΠΊΠ°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² CopyOnWriteArrayList ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ бСзопасно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π½Π΅ синхронизированного Π±Π»ΠΎΠΊΠ°.
  6. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SynchronizedList?

    1. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² CopyOnWriteArrayList для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ обновлСния / измСнСния создаСтся новая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ клонированная копия, ΠΈ Π½Π° JVM Π΅ΡΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ слияниС ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ с исходной ΠΊΠΎΠΏΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² этом случаС SynchronizedList — Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
    2. Когда Ρ€Π°Π·ΠΌΠ΅Ρ€ Arraylist большой.
    3. Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CopyOnWriteArrayList?

      1. CopyOnWriteArrayList обСспСчиваСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ссли имССтся большС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² чтСния ΠΈ запись происходит довольно Π½ΠΈΠ·ΠΊΠΎ.
      2. Когда Ρ€Π°Π·ΠΌΠ΅Ρ€ Arraylist нСбольшой.

      SynchronizedList ΠΏΡ€ΠΎΡ‚ΠΈΠ² CopyOnWriteArrayList

      SynchronizedList CopyOnWriteArrayList
      Он Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ вСсь список для обСспСчСния бСзопасности ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈ записи. Он Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ список Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, поэтому Π²ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° отсутствуСт, поэтому нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
      Π­Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π±Π΅Π· сбоСв. Π­Ρ‚ΠΎ отказоустойчивый ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.
      ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π² вСрсии Java 1.2. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Π² вСрсии Java 1.5.
      Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ списка Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ синхронизированного Π±Π»ΠΎΠΊΠ°, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ столкнСтся с Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Он ΠΌΠΎΠΆΠ΅Ρ‚ бСзопасно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π½Π΅ синхронизированного Π±Π»ΠΎΠΊΠ°.
      Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ список, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ выполняСт ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ этого списка, ΠΎΠ½ выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ConcurrentModificationException. Он Π½Π΅ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ список Π²ΠΎ врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π°, ΠΈ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ConcurrentModificationException, Ссли список измСняСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π²ΠΎ врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π°.
      Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° arraylist большой, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи большС, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π² спискС. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ArrayList малСнький ΠΈΠ»ΠΈ опСрация чтСния большС, Ρ‡Π΅ΠΌ опСрация записи.

      Π’Π½ΠΈΠΌΠ°Π½ΠΈΡŽ читатСля! НС ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ сСйчас. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ всС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Java Foundation, ΠΈ ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с курсом ΠžΡΠ½ΠΎΠ²Ρ‹ Java ΠΈ ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Java ΠΏΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ для студСнтов Ρ†Π΅Π½Π΅ ΠΈ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ отрасли.

(PDF) Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² распрСдСлСнных срСдах ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с использованиСм стандартного оборудования

Рис.1. РаспрСдСлСнноС ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ слияния Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ²

, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ мСстополоТСниС Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠ² Π½Π° основС синхронизации Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ Π±Π»ΠΎΠΊΠΎΠ² ΠΈ

.

простота конструкции. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ NDFS-II Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сбора ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… multi-

, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ для исслСдования smartspaces

, Π° Ρ‚Π°ΠΊΠΆΠ΅ для объСдинСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Com-

plex system ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ прилоТСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ распрСдСлСнноС ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡƒΡ€Π°Π²ΡŒΠΈΠ½Ρ‹Ρ… ΠΊΠΎΠ»ΠΎΠ½ΠΈΠΉ (ACO) Π±Ρ‹Π»ΠΈ Π½Π΅Π΄Π°Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² спСктр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

.

3.2. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ синхронизация

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ транспортировки Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…

[8], Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎ врСмя кодирования видСоисточника с использованиСм Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ²

ΠΈΠ»ΠΈ прямого прСобразования. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… NDFS-II API. Π­Ρ‚Π° стратСгия Π΄Π°Π΅Ρ‚

ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

ΠΈ позволяСт нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Π±Π΅Π· измСнСния основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ систСмы.

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ поставляСтся с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², основанных Π½Π° Π½Π°ΡˆΠΈΡ… ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… потрСбностях

. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚Π°

, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΈΡ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ².

Однако Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Ρ‹

ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ частоту дискрСтизации ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

. Π”Π°Ρ‚Ρ‡ΠΈΠΊΠΈ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Ρ…Π²Π°Ρ‚ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ частотой Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… хостах

, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·-Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ Π² настройкС оборудования

, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… смСщСний ΠΈ Π΄Ρ€Π΅ΠΉΡ„ΠΎΠ² Ρ‚Π°ΠΊΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ², Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ядра

, Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΈΠ»ΠΈ нСпрСдсказуСмых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с дисками.

Π­Ρ‚ΠΈ нСдостатки ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ оборудования. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Genlock, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

Π°ΠΏΡ€ΠΈΠΎΡ€ΠΈ. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ сцСнарии, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ

Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ синхронизации,

ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сбора ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

ΠΈΠ·-Π·Π° финансовых ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ синхронизировали

Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… с Ρ‚ΠΎΠ²Π°Ρ€Π½Ρ‹ΠΌ

Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств post hoc [9], Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ синхронизации

становится Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΈ слиянии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ²

Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ распрСдСлСнной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сигналов. .

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ нСсколько простых стратСгий

ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ синхронизации ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. ЭкспСримСнты

проводятся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, с использованиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния

сгСнСрированных ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±Π»ΠΎΠΊΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

, с использованиСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… часов, синхронизированных с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ сСрвСром

NTP. Однако Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… синхронизации,

, Ρ‡Ρ‚ΠΎ, вСроятно, обСспСчит Π»ΡƒΡ‡ΡˆΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ синхронизации.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² распрСдСлСнной срСдС

, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π΄Π²Π΅ основныС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

NDFS-II. ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°

icy просто Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅

, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… Π½Π΅Ρ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°

icy Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ позволяСт ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅

Π² случаС, Ссли Π΅Π³ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ·-Π·Π° нСдостаточной мощности ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

.Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сцСнариях

ios, Π³Π΄Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ потСря Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² сцСнариях Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с Π·Π°Ρ…Π²Π°Ρ‚ΠΎΠΌ сигнала Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡Π°Ρ… тяТСлой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ сцСнарии, прСдставлСнном Π½Π° рис. 1, ΠΌΡ‹ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ

ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° Π±Π»ΠΎΠΊΠ° ΠΈ синхронизация ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (см. Π‘Π»ΠΎΠΊ Β«Π”Π°Ρ‚Ρ‡ΠΈΠΊ Fu-

Β»). Π’ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π΄Π²Π° основных эффСкта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ основныС ΠΏΡ€Π°Π²ΠΈΠ»Π°

ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, источники Π²ΠΈΠ΄Π΅ΠΎ ΠΈ аудиосигнала

Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ частотами дискрСтизации ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π΅ΠΊΡƒΠ½Π΄Π° каТдая Π²Π΅Ρ‚Π²ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠΈΠ·-Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ объСдинСниС этих Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… сигналов

Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°, Π±Π΅Π· отбрасывания Π»ΡŽΠ±Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡƒΡ‚Π΅ΠΌ примСнСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ), ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

синхронизации сигналов Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ ΠΈΠ·-Π·Π° измСнСния

скорости ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Знания ΠΎ частотах дискрСтизации источников Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

. Π’ этом случаС Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… процСссорных ΡƒΠ·Π»ΠΎΠ² ΠΈ Π±Π΅Π· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ

Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ слияния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ сцСнарии ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ скоростями ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… sam-

ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ процСссора, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ.

icy: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ асинхронно. Π­Ρ‚ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ

Π½Π΅ устраняСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π²Π½ΠΎΡΠΈΠΌΡƒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ вСтвями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

, Π½ΠΎ позволяСт ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ способом объСдинСния Π΄Π°Π½Π½Ρ‹Ρ…

вмСстС. ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ сигналы большС Π½Π΅ ΠΎΡ‚Π΄Π°Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°

, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ сдвиг с постоянной Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ аудиосигнал ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ

, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, поэтому

ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ, Π½ΠΎ всС Π΅Ρ‰Π΅ Π½Π΅ синхронизированы.

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ синхронизации

API, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ Π½Π° основС описанных основных ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ:

ΠœΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±Π»ΠΎΡ‡Π½ΡƒΡŽ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ (BTStamp) Π΄ΠΎ

сигнала Π² ΡƒΠ·Π»Π°Ρ… Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² (слСва). Π½Π° рисункС).

BTStamp гСнСрируСтся ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΌ счСтчиком (ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° Π±Π»ΠΎΠΊΠ°

) ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ часами (ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ), прСдполагая, Ρ‡Ρ‚ΠΎ врСмя sys-

tems Π±Ρ‹Π»ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ синхронизировано с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ сСрвСром NTP

.ВрСмСнная ΠΌΠ΅Ρ‚ΠΊΠ° позволяСт ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ сигналы Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ²

с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ скоростями ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ блочная ΠΌΠ΅Ρ‚ΠΊΠ° позволяСт ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ-

Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ источника, Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ

, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… хостах ΠΈΠ»ΠΈ

мноТСствСнных). основныС процСссоры). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ΅Ρ‚ΠΊΠ° Π±Π»ΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для

отслСТивания ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ². Он ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π² статистичСских Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ рСгрСссии, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Widrow

ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Калмана, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠΊΠ°Π΄Ρ€ΠΎΠ²ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ.At data fu-

KIP-353: Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ синхронизации Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Kafka — Apache Kafka

Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС : ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ

Π’Π΅ΠΌΠ° обсуТдСния : ссылка

JIRA :

КАЀКА-3514

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ свСдСний ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ …
ΠŸΠžΠ›ΠžΠ–Π•ΠΠ˜Π• Π”Π•Π›


ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ обсуТдСниС Π² спискС рассылки, Π° Π½Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΈΠΊΠΈ (обсуТдСния Π²ΠΈΠΊΠΈ быстро становятся Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ).

БСгодня логичСский Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ синхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Kafka Streams слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ привносит ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€Π΅ΠΌΠΈΠ½ΠΈΠ·ΠΌΠ° Π² порядок ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° выбираСтся ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… тСматичСскими Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ· Kafka).

Π‘ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… тСматичСских Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². И, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ: 1) ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π» Ρ‚Π΅ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ запись для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для этой Π·Π°Π΄Π°Ρ‡ΠΈ, 2) ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ врСмя ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ записСй.БСгодня эта Π»ΠΎΠ³ΠΈΠΊΠ° опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

a) ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ тСматичСский Ρ€Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ, которая зависит ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… записСй.

b) ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π³ΠΎΠ»ΠΎΠ²Π½ΡƒΡŽ запись ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ наимСньшСС врСмя (Π²Ρ‹Π±ΠΎΡ€ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ записи Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ упорядочСниС смСщСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π°) И ΠΈΠΌΠ΅Π΅Ρ‚ нСпустыС Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ записи.

c) ВрСмя ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ опрСдСляСтся ΠΊΠ°ΠΊ наимСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для всСх ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всСх Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ увСличиваСтся.

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ основано Π½Π° ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ объСдинСния, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ «Π½Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ» Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Ρ‚Π΅ΠΌ с максимальной ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ. (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Ρ‚Π΅ΠΌΡ‹ ΠΌΡ‹ всСгда ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² соотвСтствии с порядком смСщСния).

ΠœΡ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ компромиссы нСупорядочСнности / Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΠ·ΠΌΠ° ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ: ΠΌΡ‹ всСгда пытаСмся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² содСрТит Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€Π΅; это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ поставили Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° самом Π΄Π΅Π»Π΅ мСньшС, Ρ‡Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, Ρ‚.Π΅.Π΅. Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠΈΠΉ ΠΈΠ· строя. Π’ΠΎ врСмя ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ доступны Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ порядку ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выполняСм Π·Π°Π΄Π°Ρ‡Π° нСсколько Ρ€Π°Π·.

Π’ этом KIP ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±ΠΎΡ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ записи для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° основС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒΒ» Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

  • Π—Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° всС Π΅Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ тСматичСскиС Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, всС извСстна тСкущая «позиция» ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Ρ‚Π΅ΠΌ.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ бСзопасно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ запись.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉ входящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ Π΅Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² (ΠΏΡ€ΠΈΠΌΠΈΡ‚Π΅ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Π΄Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ 10 ΠšΠ‘ записСй Π² сСкунду, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 запись Π² сСкунду). ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Β«ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΒ» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

 public static final String MAX_TASK_IDLE_MS_CONFIG = "max.task.idle.ms" // максимальноС врСмя настСнных часов, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ, хотя всС Π΅Ρ‰Π΅ содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ хотя Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΅Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² 


Когда Π·Π°Π΄Π°Ρ‡Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обрабатываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, это ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ нСупорядочСнности (Ρ‚. Π΅.Π΅. Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запись с ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ t0, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ врСмя вашСго ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Ρ‹Π»ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ t1> t0), ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ случая Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, сколько ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ (Ρ‚. Π•. НС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСупорядочСния: Ссли для Π½Π΅Π΅ установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Long.MAX, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΆΠ΄Π°Ρ‚ΡŒ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для этой Π·Π°Π΄Π°Ρ‡ΠΈ; Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ установлСн Π² 0, ΠΌΡ‹ всСгда Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π² Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ такая ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ порядка.И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ качСствСнныС увСдомлСния ΠΎ Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… событиях «Π²Π½Π΅ порядка», ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π²Π΅Π΄Π΅ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΡ‹ установим для Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ повСдСнию.

90 -136

 ΠœΠ•Π’Π Π˜Π§Π•Π‘ΠšΠžΠ• / ΠΠ’Π Π˜Π‘Π£Π’ΠΠžΠ• ИМЯ 
 ΠžΠŸΠ˜Π‘ΠΠΠ˜Π• 
 MBEAN NAME 
общая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² этой Π·Π°Π΄Π°Ρ‡ΠΈ Π² сСкунду / ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² процСссов Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.
 kafka.streams: type = stream-task-metrics, client-id = ([-. \ W] +), task-id = ([-. \ W] +) 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ с этим ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ бСсконСчно, Π·Π°Π΄Π°Π² для этой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Long.MAX, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠ·-Π·Π° синхронизации Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ; Π½ΠΎ Π½Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· самих Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π», Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡ… смСщСния). Одним ΠΈΠ· прямых слСдствий нСупорядочСнности являСтся сСмантика ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° соСдинСния:

Stream-Stream:

  • Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС: вычисляСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
  • left join: ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Β«Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΒ» leftRecord-null Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
  • внСшнСС соСдинСниС: ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ «Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ» leftRecord-null ΠΈΠ»ΠΈ null-rightRecord Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
  • всС Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ записи Π²Π½Π΅ порядка

Stream-Table (Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΈ Π»Π΅Π²Ρ‹ΠΉ):

  • синхронизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ установкой Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
  • записи с Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ порядка Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Ρ‚. Π΅. ΠΌΡ‹ Π½Π΅ провСряСм записи с Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ порядка ΠΈ просто ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ всС записи Π² порядкС смСщСния): Π΄Π°Π΅Ρ‚ нСпрСдсказуСмыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Π’Π°Π±Π»ΠΈΡ†Π° -Π’Π°Π±Π»ΠΈΡ†Π° (внутрСнняя / лСвая / внСшняя):

  • синхронизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΡƒΡ‚Π΅ΠΌ установки Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
  • записи Π²Π½Π΅ порядка Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ (Ρ‚. Π•. ΠœΡ‹ Π½Π΅ провСряСм записи Π²Π½Π΅ порядка ΠΈ просто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ всС записи Π² порядкС смСщСния)
  • ΠΎΠ΄Π½Π°ΠΊΠΎ соСдинСния Π’Π°Π±Π»ΠΈΡ†Π°-Π’Π°Π±Π»ΠΈΡ†Π° Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ согласованы

ΠΠ°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ измСнСния Π±Ρ‹Π»ΠΈ суммированы Π²Ρ‹ΡˆΠ΅.

  • Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, поэтому ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ совмСстимо с ΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
  • НСкотороС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ пСрСопрСдСлят значСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ различиям Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ; Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ нСсовмСстимости.

Пока Π½Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Ρ… Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ².

АрхитСктура

— ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ вопрос ΠΏΠΎ синхронизации Π΄Π²ΡƒΡ… асинхронных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ мСня Π΅ΡΡ‚ΡŒ Π΄Π²Π° асинхронных ΠΏΠΎΡ‚ΠΎΠΊΠ° — ПоСздка: {tripId, date, city} Bill: {billId, tripId, date, amount}. МнС Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ систСму для получСния Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прСдставлСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°: City, TripCount, TotalAmount. Бобытия Π² ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ синхронизированы ΠΈΠ»ΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Но Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

МоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

1.) Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘Π”: Trip ΠΈ Bill (проиндСксированныС ΠΏΠΎ TripID ΠΈ BillID). ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ сообщСния ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ сохранитС ΠΈΡ… Π² этих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… со столбцом состояния ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ счСтов ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΠΎΠ΅Π·Π΄ΠΎΠΊ. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ счСтов ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Trip запись, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π΄Π°Π½Π½Ρ‹ΠΉ tripID.Если запись Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΠΎΠ½Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (City, TripCount, TotalAmount). Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ состояниС счСта ΠΈ записи ΠΏΠΎΠ΅Π·Π΄ΠΊΠΈ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ . Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° пСриодичСской основС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ всС записи, состояниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Bill, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Trip.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я Π²ΠΈΠΆΡƒ Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ индСксация, выполнСнная Π½Π° TripID ΠΈ BillID, станСт ΡƒΠ·ΠΊΠΈΠΌ мСстом, Ссли я Π±ΡƒΠ΄Ρƒ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ записи с ΠΎΡ‡Π΅Π½ΡŒ высокой частотой.Помимо этого, Π²Ρ‹, ΠΏΠ°Ρ€Π΅Π½ΡŒ, Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с этим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π― Ρ‡ΠΈΡ‚Π°Π» Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ люди ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ это ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ извСстный Π°Π½Ρ‚ΠΈ-шаблон, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ здСсь я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π‘Π” Π² качСствС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

2.) Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², сохранитС ΠΈΡ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…: ПоСздка, Π‘ΠΈΠ»Π» (для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ записСй ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ дублирования). Для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ПоСздки Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΎΡ‡Π΅Π½ΡŒ быстрой структурой Π΄Π°Π½Π½Ρ‹Ρ…. Для этого я ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽ Π Π•Π”Π˜Π‘. Π˜Ρ‚Π°ΠΊ, послС записи Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ΅Π·Π΄ΠΊΠ΅ Π² Π‘Π”, я Π±ΡƒΠ΄Ρƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² кСш с tripid Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΈ записи Π² качСствС значСния.Π—Π°Ρ‚Π΅ΠΌ я ΠΏΠΎΡΡ‚Π°Π²Π»ΡŽ Π΄Π°Π½Π½Ρ‹Π΅ счСта Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π Π°Π±ΠΎΡ‡ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ tripid Π² кСшС. Если Ρ‚Ρ€ΠΈΠΏΠΈΠ΄ присутствуСт, Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· кСша ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈΠΏΠΈΠ΄ ΠΈΠ· кСша, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ счСт ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Если tripid Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² кСшС, Ρ‚ΠΎ worker снова помСстит Ρ‚ΠΎ ΠΆΠ΅ сообщСниС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования, вставка Π½Π΅ удастся, Ссли ΠΌΡ‹ попытаСмся Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ tripid ΠΈΠ»ΠΈ billid.Π’ случаС, Ссли вставка Π½Π΅ ΡƒΠ΄Π°Π»Π°ΡΡŒ, я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ сообщСниС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ кСш.

ЭкспСрты, Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ± этих Π΄Π²ΡƒΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…, ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для синхронной ΠΈ асинхронной связи — Redis Streams, Redis Pub / Sub, Kafka ΠΈ Ρ‚. Π”.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± инструмСнтах ΠΈ β€‹β€‹ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… общСния. Π‘ появлСниСм Streams Π² Redis Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ шаблон взаимодСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Redis Pub / Sub ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ инструмСнтам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Kafka ΠΈ RabbitMQ.Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу Π²Π°ΠΌ ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… характСристиках Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ расскаТу ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных инструмСнтах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…. НаконСц, я ΠΎΡΡ‚Π°Π²Π»ΡŽ Π²Π°ΠΌ нСбольшой ΡƒΡ€ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, надСюсь, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ быстрСС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Бинхронная связь

Π’ этом контСкстС ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС стороны Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ. Бамая простая Ρ„ΠΎΡ€ΠΌΠ° — это слуТба A ΠΈ слуТба B, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ прямыС ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ (RPC), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ HTTP REST слуТбы B ΠΈΠ· слуТбы A.Если слуТба B ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, слуТба A Π½Π΅ смоТСт Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с B, ΠΈ поэтому A потрСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ восстановлСния послС сбоя, Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ постСпСнноС сниТСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ дальшС» Netflix ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ случайная Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΡˆΠΎΡƒ, Ссли слуТба Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ Π±Ρ‹Π»Π° нСдоступна.

Π­Ρ‚ΠΈ слуТбы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΡƒΡŽ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для Π±ΠΎΠ»Π΅Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… случаСв использования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, платСТная слуТба, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π°Ρ слуТбу Π·Π°ΠΊΠ°Π·ΠΎΠ² для Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΠ»Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·Π°), Π±ΠΎΠ»Π΅Π΅ распространСны Π΄Ρ€ΡƒΠ³ΠΈΠ΅ асинхронныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠΏΠΈΡˆΡƒ Π½ΠΈΠΆΠ΅. И хотя ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° RPC Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для связи Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ», ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΈΠ»ΠΈ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». На этом этапС Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: инструмСнты Π±Π΅Π· Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈΠ»ΠΈ брокСрскиС инструмСнты.

Π‘Π΅Π· Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°

Π‘Π΅Π· Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ участники ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ шаблон, Ρ‡Π΅ΠΌ RPC. Π’ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠ°ΠΊ ZeroMQ ΠΈ Π±ΠΎΠ»Π΅Π΅ поздняя вСрсия nanoMsg. Π˜Ρ… ΠΏΠΎ ΠΏΡ€Π°Π²Ρƒ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «сокСтами TCP Π½Π° стСроидах».На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π²Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² свой ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Π΅ для создания экзСмпляра соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ встроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сообщСний, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Pub / Sub, Push / Pull, Dealer / Router ΠΈ Ρ‚. Π”.

ΠŸΠΎΡΡ€Π΅Π΄Π½ΠΈΠΊ

Brokered ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ участники ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ слуТбС, которая дСйствуСт, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, ΠΊΠ°ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ всСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сообщСний. Π₯отя эта Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ описываСтся ΠΊΠ°ΠΊ звСздообразная, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ являСтся Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π·Π²Π΅Π·Π΄Ρ‹, сам Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ (ΠΈ часто являСтся) кластСрной систСмой.

Насколько ΠΌΠ½Π΅ извСстно, Redis Pub / Sub стоит особняком Π² этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. Π’Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнты с постоянством, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NATS ΠΈΠ»ΠΈ RabbitMQ, для этого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ постоянство, Π½ΠΎ СдинствСнный Π±Ρ€ΠΎΠΊΠ΅Ρ€ чисто синхронного ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ я знаю, — это Redis. Π Π°Π·Π½ΠΈΡ†Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² настойчивости, Π½ΠΎ ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ΄Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ доставки (Ρ‚. Π•. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния) ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с запуском ΠΈ Π·Π°Π±Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ. RabbitMQ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Redis Pub / Sub фокусируСтся Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ минимального объСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ для запуска ΠΈ забывания.Как Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, это сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², бСсплатного ΠΎΠ±Π΅Π΄Π° Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚), Π½ΠΎ надСТная доставка Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΡƒ спСктру сцСнариСв использования.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Streams Π½Π΅ Π±Ρ‹Π» доступСн Π΄ΠΎ Redis вСрсии 5, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ люди ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Pub / Sub Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ доставки, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пСрСходят Π½Π° Π½Π΅Π³ΠΎ. Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ создаСтС Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ вас Π½Π΅ устраиваСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Pub / Sub, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Redis Streams, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Β«Pub / Sub, Π½ΠΎ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ возобновлСния ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний.”

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π±Π΅Π· Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° — это самый быстрый способ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ быстрСС, Ρ‡Π΅ΠΌ Redis Pub / Sub. К соТалСнию, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ всСй слоТности, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ участника Π·Π½Π°Ρ‚ΡŒ мСстополоТСниС всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ, ΠΈΠ»ΠΈ слоТныС сцСнарии сбоСв, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ Π² брокСрских систСмах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, случай, ΠΊΠΎΠ³Π΄Π° участник ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚ Π²ΠΎ врСмя Ρ„Π°Π½Π°ΡƒΡ‚Π°).

ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ использования Redis Pub / Sub Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ слишком большой пропускной способности ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π·Π°ΠΌΠ΅Π½ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ, ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡ‚Π½ΡƒΡŽ инфраструктуру с нСбольшой ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Redis для вашСго языка, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PUBLISH ΠΈ (P) SUBSCRIBE для пСрСмСщСния сообщСний.

Асинхронная связь

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ связь всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅ всС участники ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ этот шаблон, постоянноС сообщСниС являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ возмоТности Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доставку Π² случаС сбоя. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π² основном состоят ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° основС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Асинхронная связь Π½Π° основС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

Π­Ρ‚ΠΎ Β«Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉΒ» способ асинхронной связи ΠΈ основа для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сСрвис-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ (SOA). ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° сСрвису Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ, ΠΎΠ½ оставляСт сообщСниС Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ систСмС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ другая слуТба ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΠΎΠ·ΠΆΠ΅. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эти ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики сообщСний ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΡ‚ этих систСм — Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ (ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ нСсколькими ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ потрСбитСлями, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ свойство Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт нСзависимый ΠΎΡ‚ΠΊΠ°Π·, Ρ‡Ρ‚ΠΎ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ для ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ. НапримСр, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠ»Π°Ρ‚Π΅ΠΆ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΈΠ·-Π·Π° отсутствия ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ профиля ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ) Π½Π΅ остановит вСсь ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π‘Π°ΠΌΡ‹ΠΉ извСстный инструмСнт Π² этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ — RabbitMQ, Π·Π° Π½ΠΈΠΌ слСдуСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ AMQP (собствСнный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Rabbit) ΠΈΠ»ΠΈ MQTT (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ стандарт).ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся использованиС RabbitMQ Ρ‡Π΅Ρ€Π΅Π· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ простой способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ письма), Π° Ρ‚Π°ΠΊΠΆΠ΅ подслащСнный интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСний Π±ΠΎΠ»Π΅Π΅ идиоматичСской Π² ​​опрСдСлСнных клиСнтских экосистСмах. НСкоторыС ΠΈΠ· этих Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой «простыС» ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Sidekiq (Ruby), Celery (Python), Dramatiq (Python) ΠΈ Ρ‚. Π”. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Β«Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅Β» слуТСбныС ΡˆΠΈΠ½Ρ‹ прСдприятия (ESB), Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NServiceBus (C #), MassTransit ( C #), Apache Synapse (Java) ΠΈΠ»ΠΈ Mulesoft (Java).

Π‘ΠΎΠ»Π΅Π΅ простая вСрсия этого шаблона (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡) Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списков Redis. Redis ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ созданиС ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Особо слСдуСт ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Kue, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Redis Π² изящной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ для JavaScript.

Асинхронная связь Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ самый простой способ использования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² — это просто Ρ„ΠΎΡ€ΠΌΠ° хранСния. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΡΠ΅Ρ€ΠΈΡŽ записСй, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.НапримСр, показания Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ содСрТат значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ создания ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для добавлСния (Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅). Π£ Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ довольно рСгулярная структура (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ), свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для большСй эффСктивности использования пространства. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Ρ…ΠΎΡ€ΠΎΡˆΠΎ вписываСтся Π² ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ самый прямой способ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ — это ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ эффСктивно.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ использования связи, всС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, получая обновлСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ добавлСния Π½ΠΎΠ²Ρ‹Ρ… записСй.Иногда это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ наблюдСниСм Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ подпиской Π½Π° Π½Π΅Π³ΠΎ. Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Streams Π² качСствС инструмСнта связи — ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π±Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Pub / Sub, Π² основном создавая возобновляСмый Pub / Sub. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ подписчику просто Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² случаС сбоя ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ — Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ — Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ‚ΠΎΠΊΠΈ, входя Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ .Основная идСя здСсь Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ описывали ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡ΠΈ / сообщСния, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ событиСм. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° основС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ слуТбы Π΄Ρ€ΡƒΠ³ΠΎΠΉ слуТбой, которая Ρ…ΠΎΡ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ сдСлала, Π½ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ происходит ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅: каТдая слуТба отправляСт обновлСния состояния Π² свой собствСнный ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ услуги.

Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство Ρ‚ΠΎΠ½ΠΊΠΈΡ… послСдствий. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ слуТбы ΠΏΠΎΠ·ΠΆΠ΅ ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².Π’ очСрСдях это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΈ способ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выраТаСтся Π² этих систСмах, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ позволяСт это (ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅).

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ: структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ схСму связи. НСкоторыС Π΄Π°Π½Π½Ρ‹Π΅ СстСствСнно Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² это (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΆΡƒΡ€Π½Π°Π»Ρ‹), ΠΈ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° очСрСдях Π·Π°Π΄Π°Ρ‡. ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ принятия этой двойствСнной ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ называСтся поиском событий.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ источника событий Π²Ρ‹ опрСдСляСтС свои бизнСс-ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ°ΠΊ бСсконСчный ΠΏΠΎΡ‚ΠΎΠΊ событий ΠΈ позволяСтС бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ слуТбам Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ.Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π΅ всСгда Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ прСимущСства ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ слоТных вопросов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Β«ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π±Ρ‹Π»ΠΎ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° X Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Y?Β», На ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ прямо Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π°ΡƒΠ΄ΠΈΡ‚Π°. ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ источник событий, Π½ΠΎ для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², доставкой ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ «бСспорядочными» Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ большим ΠΏΠΎΠ΄ΡΠΏΠΎΡ€ΡŒΠ΅ΠΌ.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° шаблонов Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство инструмСнтов. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ со слона Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅: Apache Kafka, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Apache Pulsar (ΠΎΡ‚ Yahoo) ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Kafka Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ SaaS. НаконСц, Π΅ΡΡ‚ΡŒ Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°: Redis Streams.

Apache Kafka ΠΏΡ€ΠΎΡ‚ΠΈΠ² Redis Streams

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Redis Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Β«ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌΒ», Kafka Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Β«Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ Ρ‚Π΅ΠΌΡ‹Β», Π° Π² Kafka ΠΏΠΎΡ‚ΠΎΠΊΠΈ — это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ другая концСпция, которая вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ содСрТимого Ρ‚Π΅ΠΌΡ‹ Kafka.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠ±Π΅ систСмы эквивалСнтны: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° любой ΠΈΠ· Π½ΠΈΡ… Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ сущСствСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свои Π΄Π°Π½Π½Ρ‹Π΅. Различия Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅Ρ‚Π΅ΡΡŒ Π² практичСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ, Π° ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ½ΠΈ сущСствСнны.

Kafka сущСствуСт ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ, ΠΈ люди ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ являСтся СдинствСнным источником истины. Однако, Ссли Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Ρ†Π΅Π½ΠΈΡ‚Π΅ простоту ΠΊΠ°ΠΊ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Ρ‚Π°ΠΊ ΠΈ Π² эксплуатации, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Π½Π΅Π΅ миллисСкунды, Ρ‚ΠΎΠ³Π΄Π° Redis Streams ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ мСсто Π² вашСй Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅.

Когда я Π³ΠΎΠ²ΠΎΡ€ΡŽ «простота», я имСю Π² Π²ΠΈΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π½ΠΎ это. Если Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Redis Streams, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Kafka Π² производствСнной срСдС, я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ своСго прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Redis Streams, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΏΠ°Ρ€Π° ΠΌΠΈΠ½ΡƒΡ‚ встаСт ΠΈ запускаСтся Π½Π° вашСм Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шаблона

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаблон.

Бинхронная связь Π±Π΅Π· Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°

Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ клиСнтских устройств (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,g., Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Arduino) Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎ локальной сСти Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠ»ΠΈ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ — это, вСроятно, Β«TCP-соСдинСниС Π½Π° стСроидах».

Бинхронная связь Ρ‡Π΅Ρ€Π΅Π· посрСдник

Π§Π°Ρ‚-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² стилС IRC (Ρ‚. Π•. Π‘Π΅Π· истории) ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹Ρ… ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² / событий Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ plug-and-play Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с брокСрским ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ. Π‘Π΅Π½Π΄ΠΆΠ°ΠΌΠΈΠ½ Π‘Π΅Ρ€ΠΆΠ°Π½Ρ‚ рассказал ΠΎΠ± этом послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования Π½Π° RedisConf19 Π² Π‘Π°Π½-Ѐранциско (слайды).

Асинхронная связь Π½Π° основС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

ΠŸΠΎΠΈΡΠΊΠΎΠ²Ρ‹Π΅ Ρ€ΠΎΠ±ΠΎΡ‚Ρ‹

ΠΎΡ‡Π΅Π½ΡŒ часто ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° этот шаблон, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅Π±-слуТбы с опСрациями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос.ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π² YouTube.

Асинхронная связь Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ², устройств ΠΈ микросСрвисов Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π²Π΅Ρ‰Π΅ΠΉ (IoT) Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ‡Π°Ρ‚-прилоТСниям Π² стилС Slack (Ρ‚. Π•. Π‘ историСй).

Redis ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΌΠΈΡ€Π°

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ, я Ρ…ΠΎΡ‡Ρƒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вас с ΠΎΠ΄Π½ΠΈΠΌ послСдним сообраТСниСм. Настоящая ΡΠ²Π΅Ρ€Ρ…ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Redis Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ , Π° просто , систСма ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями Pub / Sub, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ»ΠΈ потоковая слуТба.Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ просто Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. На самом Π΄Π΅Π»Π΅, проявив достаточно настойчивости, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ описанный Π²Ρ‹ΡˆΠ΅ шаблон ΠΏΠΎΠ²Π΅Ρ€Ρ… рСляционной Π‘Π£Π‘Π”, Π½ΠΎ Π΅ΡΡ‚ΡŒ практичСскиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ.

Redis ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ систСму «запустил ΠΈ Π·Π°Π±Ρ‹Π»Β» Pub / Sub, Π° Ρ‚Π°ΠΊΠΆΠ΅ настоящий Stream Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, с модулями Redis Redis Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ с нашими Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ использования постоянных ΠΈ нСпостоянных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π°Ρ‚Π°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π°Ρ‚Π° Π² IRC-стилС

Π’Ρ‹ΡˆΠ΅ я ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Pub / Sub Π±Ρ‹Π» Π±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот Ρ‚ΠΈΠΏ Ρ‡Π°Ρ‚-прилоТСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Однако для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°ΠΆΠ΅ простой вСрсии этого прилоТСния Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ придСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ глобальном спискС ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ спискС присутствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Π“Π΄Π΅ Π²Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ это состояниС? Как ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, особСнно Ссли экзСмпляр слуТбы Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚? Π’ Redis ΠΎΡ‚Π²Π΅Ρ‚ прост: отсортированныС Π½Π°Π±ΠΎΡ€Ρ‹, ΠΊΠ»ΡŽΡ‡ΠΈ с ΠΈΡΡ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌ сроком дСйствия ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.Если Π±Ρ‹ Π²Ρ‹ использовали RabbitMQ, Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π°ΡΡŒ Π±Ρ‹ Π‘Π£Π‘Π”.

Π§Π°Ρ‚ Π² стилС Slack

БСсСды ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ СстСствСнно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ сообщСний. Нам Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ сюда источники событий, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΡƒΠΆΠ΅ собствСнная структура этого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Redis вмСсто Kafka Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅? Как ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ваша систСма Ρ‡Π°Ρ‚Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ сообщСний. Π•ΡΡ‚ΡŒ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго прСдставлСны ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция Β«ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ X пСчатаСт…»: эта информация нСпостоянна, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ всСм участникам, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹.Если Π±Ρ‹ Π²Ρ‹ использовали Kafka, Π²Π°ΠΌ Π±Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ систСму Pub / Sub.

На вынос

Π’ распрСдСлСнных систСмах, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° координация, Π²Π°ΠΌ часто трСбуСтся раздСляСмоС состояниС, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этого Ρ„Π°ΠΊΡ‚Π° довольно часто ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ слишком слоТным Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ. Redis прСкрасно это ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΈ это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π΅Π³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°. Если Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ слоТныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΈ это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Redis Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ.НапримСр, Ρ‚Π°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ запись Π² ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π² (Π½Π°Ρ‡Π°Π»ΠΎ) ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² Pub / Sub:

MULTI
XADD ΠΆΡƒΡ€Π½Π°Π»Ρ‹: service1 * level error req-id 42 stack-trace "..."
LPUSH actions-queue "RESTART = service1"
PUBLISH live-notifs "НовоС событиС ошибки Π² service1!"
EXEC

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ сСмь Π·Π»ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°.
Π‘ΡŽΠΆΠ΅Ρ‚ ΠΎ Redis Pilgrim vs.ΠœΠΈΡ€

НадСюсь, это даст Π²Π°ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основных шаблонов ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² распрСдСлСнных систСмах. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ понадобится ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π΅ слуТбы вмСстС, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΡΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…. Если Π²Π°ΠΌ нравится Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ TCP-соСдинСниях Π½Π° стСроидах ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ…, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ ΠΌΠ½Π΅ Π² Twitter @croloris.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Redis Streams — отличная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Redis, ΠΎΠ½ станСт ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, особСнно Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Redis ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡƒΠ» ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ возмоТности для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядов, Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² ΠΈ поиска.Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Redis Streams, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с этим Π²Π²ΠΎΠ΄Π½Ρ‹ΠΌ сообщСниСм Π² Π±Π»ΠΎΠ³Π΅ Antirez, Π° Ρ‚Π°ΠΊΠΆΠ΅ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. Но Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ подходящим инструмСнтом для Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ : ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Pub / Sub ΠΈΠ»ΠΈ просто скромныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² списках Redis (ΠΈΠ»ΠΈ Π² сортированных Π½Π°Π±ΠΎΡ€Π°Ρ…, Ρƒ Redis это Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ).

10 вопросов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (RP) Π½Π΅ являСтся Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ ΡƒΠΆΠ΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎΠ± этом. Π­Ρ‚ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π±Ρ‹Π» Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²Π²Π΅Π΄Π΅Π½ Π² ΠΌΠΈΡ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² 1960-Ρ… Π³ΠΎΠ΄Π°Ρ…, ΠΈ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΎ Π½Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ ΠΈ писалось. К соТалСнию, ΠΊΠ°ΠΊ это часто Π±Ρ‹Π²Π°Π΅Ρ‚, новая концСпция быстро ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ»Π° Π²ΠΎΠΊΡ€ΡƒΠ³ сСбя мноТСство Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°Π½ΠΈΠΉ, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ это Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎ сСй дСнь. Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ манифСст 2014 Π³ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставил Β«Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ систСмы» ΠΈ ΠΈΡ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ «свящСнных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Β», Π΅Ρ‰Π΅ большС испортил всС. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ, ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈ Π³Π΄Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java (Ссли это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ).

# 1 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΄Π²ΡƒΡ… словах?

Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — это ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с асинхронными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ событий) ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ распространСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ срСды выполнСния (контСкста) Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС.

# 2 Π§Ρ‚ΠΎ это Π·Π° Β«ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ распространСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉΒ»?

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, сСгодня пятница, ΠΈ Π”ΠΆΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ провСсти этот Π²Π΅Ρ‡Π΅Ρ€ со своим Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π‘ΠΎΠ±ΠΎΠΌ, готовя ΠΏΠΈΡ†Ρ†Ρƒ ΠΈ просматривая ΠΎΠ΄ΠΈΠ½ ΠΈΠ· эпизодов Β«Π—Π²Π΅Π·Π΄Π½Ρ‹Ρ… Π²ΠΎΠΉΠ½Β».ΠžΠ±Ρ€ΠΈΡΡƒΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ.

  1. Π”ΠΆΠΎΠ½ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠŸΠΎΡ‚ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚, Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΈΡ†Ρ†Ρƒ ΠΈ ΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Π°. Π—Π°Ρ‚Π΅ΠΌ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ своСго Π΄Ρ€ΡƒΠ³Π°. И Π½Π°ΠΊΠΎΠ½Π΅Ρ† (с Π‘ΠΎΠ±ΠΎΠΌ ΠΈ ΠΏΠΈΡ†Ρ†Π΅ΠΉ) добираСтся Π΄ΠΎ Π΄ΠΎΠΌΠ° ΠΈ приступаСт ΠΊ Ρ„ΠΈΠ»ΡŒΠΌΡƒ. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ sync , ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ, вСроятно, Π”ΠΆΠΎΠ½ Π·Π°Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ‚ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  2. Π”ΠΆΠΎΠ½ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΈΡ†Ρ†Ρƒ ΠΎΠ½Π»Π°ΠΉΠ½, Π·Π²ΠΎΠ½ΠΈΡ‚ Π‘ΠΎΠ±Ρƒ, ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ. Он ΠΈΠ΄Π΅Ρ‚ Π΄ΠΎΠΌΠΎΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΈΡ†Ρ†Ρƒ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΠΌ (ΠΈ Сст ΠΏΠΈΡ†Ρ†Ρƒ), Π½Π΅ доТидаясь появлСния Π‘ΠΎΠ±Π°.Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ async .
  3. Π”ΠΆΠΎΠ½ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΈΡ†Ρ†Ρƒ, Π·Π²ΠΎΠ½ΠΈΡ‚ Π‘ΠΎΠ±Ρƒ, ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ, ΠΈΠ΄Π΅Ρ‚ Π΄ΠΎΠΌΠΎΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΈΡ†Ρ†Ρƒ. Но Π½Π° этот Ρ€Π°Π· ΠΎΠ½ ΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π‘ΠΎΠ±, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΠΌ. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ . Π’Ρ‹ ΠΆΠ΄Π΅Ρ‚Π΅, ΠΏΠΎΠΊΠ° всС асинхронныС дСйствия (измСнСния) Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ дальнСйшим дСйствиям.
# 3 Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ систСмы — это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅?

НСт, это Π½Π΅ Ρ‚Π°ΠΊ.Π₯отя эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ синонимы, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ синонимами ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ.

Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ систСмы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ «рСактивности». Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ design, ΠΈ , Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ устойчивыС, Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹Π΅ прилоТСния.

Π’Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… систСмах, Π½ΠΎ это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ идСя, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ комбинация приносит Π΅Ρ‰Π΅ большС прСимущСств Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ слабосвязанными, позволяСт Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы, ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

# 4 Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° Β«Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΒ» Π² Java?

Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° , Π½Π°ΠΌ часто трСбуСтся асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ наши систСмы быстрыми ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ΠΌΠΈ. Π’ Java, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ староС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСприятной ΠΈ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для этой «чисто» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с асинхронными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

# 5 Как ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ срСду Π½Π° Java?

Π’ своих послСдних выпусках (начиная с Java 8) сама Java прСдприняла нСсколько ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ввСсти Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ , Π½ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ эти ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ популярны срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Но Π΅ΡΡ‚ΡŒ нСсколько Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈ рСгулярно обновляСмых сторонних Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ программирования Π½Π° Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя ΠΈ поэтому особСнно Π»ΡŽΠ±ΠΈΠΌΡ‹ ΠΈ Π»Π΅Π»Π΅ΡŽΡ‚ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

RxJava Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ API Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, спСцифичным для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java.Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Java 6 ΠΈ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ асинхронныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, основанныС Π½Π° событиях, ΠΊΠ°ΠΊ для Java, Ρ‚Π°ΠΊ ΠΈ для Android Java, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Spring Reactor — Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Java ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Spring. Он ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° RxJava, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π²ΠΎΠ΅Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ благодаря возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства Java 8.

# 6 Π§Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ с RP Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ?

ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ — благодаря возмоТности быстро ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ UX — благодаря возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ΠΌ ΠΊ своСму ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ обновлСния — Π·Π° счСт Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ прСдсказуСмого ΠΊΠΎΠ΄Π°.

# 7 Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС это Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ?

Β«Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅Β» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ бСспрСпятствСнно Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ, поэтому Π½Π΅Ρ‚ нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ всю модСль программирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΡΠ°Π±ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ стили программирования, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ «рСактивности» ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ слоТности.ΠœΠ΅Ρ€Π° — это сокровищС. НапримСр, Ссли это простой Π²Π΅Π±-сайт, вряд Π»ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ввСсти систСму Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ, Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….

# 8 Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RP?

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ обСспСчиваСт элСгантноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈΠ»ΠΈ :

  • Π‘ΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСти, Ρ‡Π°Ρ‚Ρ‹
  • Π˜Π³Ρ€Ρ‹
  • Аудио ΠΈ Π²ΠΈΠ΄Π΅ΠΎ прилоТСния

И ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ любого Ρ‚ΠΈΠΏΠ° прилоТСния :

  • Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса
  • ΠŸΡ€ΠΎΠΊΡΠΈ-сСрвСры, балансировщики Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
  • Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚, машинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅
  • ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ? ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ наш Π½Π΅Π΄Π°Π²Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Java, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

# 9 Когда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ RP?

ΠŸΡ€ΠΎΡ‰Π΅ говоря, Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ RP Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π² этом Π½Π΅Ρ‚ нСобходимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π³Π΄Π΅ Π½Π΅Ρ‚ Β«ΠΆΠΈΠ²Ρ‹Ρ…Β» Π΄Π°Π½Π½Ρ‹Ρ…, высокая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ»ΠΈ большоС количСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

# 10 Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java?

К соТалСнию, простоС ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Π½Π΅ ΠΎΠΊΠ°ΠΆΡƒΡ‚ большого влияния.Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ трСбуСтся Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, усилий ΠΈ практичСского ΠΎΠΏΡ‹Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΌ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ абстракции. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Β«Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΒ», Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚Ρƒ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π³Π΄Π΅ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для вашСй систСмы ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ввСсти ΠΈΡ… Π² Π½Π΅ΠΌ.

ΠšΠ»ΡŽΡ‡

Β«Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» большС Π½Π΅ ΠΌΠΎΠ΄Π½ΠΎΠ΅ слово, Π½ΠΎ всС Π΅Ρ‰Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.ΠœΡ‹ надССмся, Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с этим Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ, Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ сбиты с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это всСго лишь Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΡΡ‚ΠΈΠ»ΡŒ кодирования, Π² основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»Π΅ΠΆΠΈΡ‚ эффСктивноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ измСнСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ асинхронных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. RP ΠΈΠΌΠ΅Π΅Ρ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Java, Π³Π΄Π΅ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. RP ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Java осознания ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ стиля программирования. Однако Π² случаС успСха усилия Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Ρ‹ зря, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это позволяСт прилоТСниям Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ устойчивыми ΠΊ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ UX, дСлая ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹ΠΌΠΈ.Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° слишком остро. Π‘Π΅Π·Π΄ΡƒΠΌΠ½ΠΎΠ΅ использованиС Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ нСобходимости просто испортит ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ слоТности.

Π― Π₯ОЧУ УЗНАВЬ Π‘ΠžΠ›Π¬Π¨Π•

Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ консалтинг ΠΎΡ‚ ScienceSoft

ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° основС Java? Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π½Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… своСму Π΄Π΅Π»Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ вСсь ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» срСды Java.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *