DEV_EASY_NOTES Telegram 32
​​Следующая проблема многопоточности Atomicity.

Суть в том, что в платформе, с которой вы работаете, те операции, которые как вам кажется выполняются за одну операцию, на самом деле могут выполняться в несколько операций.

Потому как большинство тут джависты, будем рассуждать на примере платформы JVM (я тупо в других не шарю...)

Начнем с простого примера:

fun main(){
var number: Int = 0
number++
print(number)
}

Взглянем подробнее на операцию number++ – за сколько шагов она делается? В прошлом посте мы уже разобрали, что тут происходит 3️⃣ операции:
📖 считать значение переменной number;
1️⃣ увеличить значение на 1;
✒️ записать новое значение в переменную number.

Все это довольно очевидно и наверняка в головах у вас звучит "Спасибо Кэп 👨‍✈️", но не спешите меня осуждать. Перейдем к примеру прикольнее:

fun main(){
val number: Long = 0
number = 42
print(number)
}

Смотрим на операцию number = 42 сколько шагов делается тут? Иииии наш любимый ответ хз 🤷‍♂️, может быть в одну операцию, но может и в две)
"Что за хуефокус" – Вопрос, который мог возникнуть в вашей голове и чтобы на него ответить давайте разбираться.

Начнем с того, что это зависит от конкретной JVM и окружения, в которой она выполняется. Как мы знаем программы написанные на языке java можно запускать везде, где есть JVM. Мы пишем на java, а JVM уже умеет работать с конкретной платформой.

И вот тут начинается веселье, в примере мы используем Long. В большинстве языков – Long это целочисленное значение, под которое выделяется 64 бита (для Double кстати тоже).

💻 Процессоры у нас бывают 32х и 64х разрядные. Представим, что JVM работает в системе с 32х разрядным процессором. Вот незадача у нас переменная с размером в 64 бита, а процессор 32х разрядный, как он тогда вообще может записать значение в переменную типа Long? 🤔

Правильно, в 2 этапа, сначала первые 32 бита, затем вторые 32 бита. Смекаете к чему я веду и почему это является проблемой многопоточности? Потому как может быть ситуация, где один поток запишет первые 32 бита, а другой вторые 32 бита. В итоге получим такой баг, который без знания этих основ можно искать очень долго 🔎.

Вот так, как всегда проблема обозначена, а решение я пока попридержу.
👍6



tgoop.com/dev_easy_notes/32
Create:
Last Update:

​​Следующая проблема многопоточности Atomicity.

Суть в том, что в платформе, с которой вы работаете, те операции, которые как вам кажется выполняются за одну операцию, на самом деле могут выполняться в несколько операций.

Потому как большинство тут джависты, будем рассуждать на примере платформы JVM (я тупо в других не шарю...)

Начнем с простого примера:

fun main(){
var number: Int = 0
number++
print(number)
}

Взглянем подробнее на операцию number++ – за сколько шагов она делается? В прошлом посте мы уже разобрали, что тут происходит 3️⃣ операции:
📖 считать значение переменной number;
1️⃣ увеличить значение на 1;
✒️ записать новое значение в переменную number.

Все это довольно очевидно и наверняка в головах у вас звучит "Спасибо Кэп 👨‍✈️", но не спешите меня осуждать. Перейдем к примеру прикольнее:

fun main(){
val number: Long = 0
number = 42
print(number)
}

Смотрим на операцию number = 42 сколько шагов делается тут? Иииии наш любимый ответ хз 🤷‍♂️, может быть в одну операцию, но может и в две)
"Что за хуефокус" – Вопрос, который мог возникнуть в вашей голове и чтобы на него ответить давайте разбираться.

Начнем с того, что это зависит от конкретной JVM и окружения, в которой она выполняется. Как мы знаем программы написанные на языке java можно запускать везде, где есть JVM. Мы пишем на java, а JVM уже умеет работать с конкретной платформой.

И вот тут начинается веселье, в примере мы используем Long. В большинстве языков – Long это целочисленное значение, под которое выделяется 64 бита (для Double кстати тоже).

💻 Процессоры у нас бывают 32х и 64х разрядные. Представим, что JVM работает в системе с 32х разрядным процессором. Вот незадача у нас переменная с размером в 64 бита, а процессор 32х разрядный, как он тогда вообще может записать значение в переменную типа Long? 🤔

Правильно, в 2 этапа, сначала первые 32 бита, затем вторые 32 бита. Смекаете к чему я веду и почему это является проблемой многопоточности? Потому как может быть ситуация, где один поток запишет первые 32 бита, а другой вторые 32 бита. В итоге получим такой баг, который без знания этих основ можно искать очень долго 🔎.

Вот так, как всегда проблема обозначена, а решение я пока попридержу.

BY Dev Easy Notes




Share with your friend now:
tgoop.com/dev_easy_notes/32

View MORE
Open in Telegram


Telegram News

Date: |

There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. The creator of the channel becomes its administrator by default. If you need help managing your channel, you can add more administrators from your subscriber base. You can provide each admin with limited or full rights to manage the channel. For example, you can allow an administrator to publish and edit content while withholding the right to add new subscribers. Hui said the messages, which included urging the disruption of airport operations, were attempts to incite followers to make use of poisonous, corrosive or flammable substances to vandalize police vehicles, and also called on others to make weapons to harm police. Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. Today, we will address Telegram channels and how to use them for maximum benefit.
from us


Telegram Dev Easy Notes
FROM American