Python не гарантирует никаких операций атома c, кроме указанных c конструкций мьютекса, таких как блокировки и семафоров . Некоторые операции будут кажется, что это atomi c, потому что GIL предотвратит запуск байт-кода одновременно на нескольких python потоках "Эта блокировка необходима главным образом потому, что управление памятью CPython не является потоком -безопасно".
В основном это означает, что python обеспечит полную оценку всей инструкции байт-кода, прежде чем разрешить другому потоку продолжить. Это не означает, однако, что вся строка кода гарантированно завершается без перерыва. Это особенно верно для вызовов функций. Чтобы глубже взглянуть на это, взгляните на модуль dis
.
Я также укажу, что этот разговор об атомарности ничего не значит на аппаратном уровне, сама идея интерпретируемый язык должен абстрагироваться от аппаратного обеспечения. Если вы хотите учесть «фактическую» атомарность оборудования, обычно это будет функция, предоставляемая операционной системой (именно так python, вероятно, реализует такие вещи, как threading.Lock
).
Обратите внимание на размеры данных (это просто быстрый ie, потому что это совсем другой вопрос):
sizeof(tm)
: 8 байт для 64-разрядного числа с плавающей запятой, 8 байт для указатель на тип данных и 8 байтов для указателя на счетчик ссылок
sizeof(int_tm)
: целые числа немного сложнее, так как некоторые маленькие значения «кэшируются» с использованием меньшего формата для эффективности, чем большого значения используют более гибкий тип, в котором число байтов, используемых для хранения целого числа, может быть увеличено до сколь угодно большого значения.
sizeof(bin_tm)
: Это на самом деле строка, поэтому она занимает гораздо больше памяти, чем просто число, есть довольно значительные издержки, плюс как минимум один байт на символ.
«Использую ли я неправильный тип для преобразования ..?» Нам нужно знать, что вы пытаетесь сделать с результатом, чтобы ответить на этот вопрос.