https://github.com/alexeev-prog/carbon-colorscheme
Моя цветовая схема - Carbon.
Пока есть конфиг для терминала alacritty и sublime text.
Моя цветовая схема - Carbon.
Пока есть конфиг для терминала alacritty и sublime text.
👍5 3
Многопоточность в программировании является важным механизмом в наше время.
В семействах ОС Windows - каждая программа запускает один процесс выполнения, в котором находится как минимум один поток (нить). В процессе может находиться множество потоков, между которыми делится процессорное время. Один процесс не может напрямую обратиться к памяти другого процесса, а потоки же разделяют одно адресное пространство одного процесса. То есть в Windows - процесс это совокупность потоков.
В Linux же немного по-другому. Сущность процесса такая же, как и в Windows - это исполняемая программа со своими данными. Но вот поток в Linux является отдельным процессом (можно встретить название как "легковесный процесс", LWP). Различие такое же - процесс отдельная программа со своей памятью, не может напрямую обратиться к памяти другого процесса, а вот поток, хоть и отдельный процесс, имеет доступ к памяти процесса-родителя.
LWP процессы создаются с помощью системного вызова clone() с указанием определенных флагов.
Но также имеется такая вещь, которая называется "POSIX Threads" - библиотечка стандарта POSIX, которая организует потоки (они же нити) внутри процесса. Т.е тут уже распараллеливание происходит в рамках одного процесса.
И тут встает вопрос различия терминов "поток", "процесс", "нить" и т.д. Проблема в том, что в англоязычной литературе данные термины определяются однозначно, у нас же с нашим великим и могучим имеются противоречия, что может привести к дикому диссонансу.
Но это все в общих чертах, для более точной информации следует обратиться к соответствующей литературе, либо к официальной документации, можно почитать man'ы.
Рассмотрим создания потока/нити с помощью функций из pthread.h (POSIX Threads):
Как видно из кода, сущность потока воплощена в функции, в данном случае, threadFunc. Имя такой функции может быть произвольным, а вот возвращаемый тип и тип входного аргумента должны быть строго void*. Данная функция будет выполняться в отдельном потоке исполнения, поэтому необходимо с особой осторожностью подходить к реализации данной функции из-за доступа к одной и той же памяти родительского процесса многими потоками. Завершение достигается несколькими вариантами: поток достиг точки завершения (return, pthread_exit(0)), либо поток был завершен извне.
Создание потока происходит с помощью функции pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*function)(void*), void* arg), где: tid - идентификатор потока, attr - параметры потока (NULL - атрибуты по умолчанию, подробности в man), function - указатель на потоковую функцию, в нашем случае threadFunc и arg - указатель на передаваемые данные в поток.
Функция pthread_join ожидает завершения потока thread. Второй параметр этой функции - результат, возвращаемый потоком.
#Linux@hex_warehouse #SysDev@hex_warehouse #Threads@hex_warehouse #CLanguage@hex_warehouse
В семействах ОС Windows - каждая программа запускает один процесс выполнения, в котором находится как минимум один поток (нить). В процессе может находиться множество потоков, между которыми делится процессорное время. Один процесс не может напрямую обратиться к памяти другого процесса, а потоки же разделяют одно адресное пространство одного процесса. То есть в Windows - процесс это совокупность потоков.
В Linux же немного по-другому. Сущность процесса такая же, как и в Windows - это исполняемая программа со своими данными. Но вот поток в Linux является отдельным процессом (можно встретить название как "легковесный процесс", LWP). Различие такое же - процесс отдельная программа со своей памятью, не может напрямую обратиться к памяти другого процесса, а вот поток, хоть и отдельный процесс, имеет доступ к памяти процесса-родителя.
LWP процессы создаются с помощью системного вызова clone() с указанием определенных флагов.
Но также имеется такая вещь, которая называется "POSIX Threads" - библиотечка стандарта POSIX, которая организует потоки (они же нити) внутри процесса. Т.е тут уже распараллеливание происходит в рамках одного процесса.
И тут встает вопрос различия терминов "поток", "процесс", "нить" и т.д. Проблема в том, что в англоязычной литературе данные термины определяются однозначно, у нас же с нашим великим и могучим имеются противоречия, что может привести к дикому диссонансу.
Но это все в общих чертах, для более точной информации следует обратиться к соответствующей литературе, либо к официальной документации, можно почитать man'ы.
Рассмотрим создания потока/нити с помощью функций из pthread.h (POSIX Threads):
#include <pthread.h>
//потоковая функция
void* threadFunc(void* thread_data){
//завершаем поток
pthread_exit(0);
}
int main(){
//какие то данные для потока (для примера)
void* thread_data = NULL;
//создаем идентификатор потока
pthread_t thread;
//создаем поток по идентификатору thread и функции потока threadFunc
//и передаем потоку указатель на данные thread_data
pthread_create(&thread, NULL, threadFunc, thread_data);
//ждем завершения потока
pthread_join(thread, NULL);
return 0;
}
Как видно из кода, сущность потока воплощена в функции, в данном случае, threadFunc. Имя такой функции может быть произвольным, а вот возвращаемый тип и тип входного аргумента должны быть строго void*. Данная функция будет выполняться в отдельном потоке исполнения, поэтому необходимо с особой осторожностью подходить к реализации данной функции из-за доступа к одной и той же памяти родительского процесса многими потоками. Завершение достигается несколькими вариантами: поток достиг точки завершения (return, pthread_exit(0)), либо поток был завершен извне.
Создание потока происходит с помощью функции pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*function)(void*), void* arg), где: tid - идентификатор потока, attr - параметры потока (NULL - атрибуты по умолчанию, подробности в man), function - указатель на потоковую функцию, в нашем случае threadFunc и arg - указатель на передаваемые данные в поток.
Функция pthread_join ожидает завершения потока thread. Второй параметр этой функции - результат, возвращаемый потоком.
#Linux@hex_warehouse #SysDev@hex_warehouse #Threads@hex_warehouse #CLanguage@hex_warehouse
Кратко об обучении программированию
Воможно все. есть разный стартовый "капитал", с одним трудно стать "миллионером", с другим легко. но по сути при сильном желании можно все. Начинай с малого, сделай для себя программу обучения. Попробуй медленно, но верно идти к цели.
Изучите предлагаемый пример кода глазами. Читайте его несколько раз, пока вам не станет всё понятно. Каждая строчка должна быть достаточно очевидной.
Попробуй переписать в тетрадь код. Потом перепиши его в редактор, запусти, проверь на ошибки. Ищи ошибки сам, желательно по докам. Ответь на вопрос - откуда взялась эта ошибка и как ее больше не совершать?
Потом попробуй уйти от примера. Добавь сам что то новое, попробуй изучить новое путем практики. И также понимай сам код.
Такой метод обучения долгий, но действенный. Учась по такому, ты хоть и будешь отставать по времени, но зато ты прокачаешь не только навык программирования, но и другие (такие как проблем солвинг, анализ кода).
#Learning@hex_warehouse #Code@hex_warehouse
Воможно все. есть разный стартовый "капитал", с одним трудно стать "миллионером", с другим легко. но по сути при сильном желании можно все. Начинай с малого, сделай для себя программу обучения. Попробуй медленно, но верно идти к цели.
Изучите предлагаемый пример кода глазами. Читайте его несколько раз, пока вам не станет всё понятно. Каждая строчка должна быть достаточно очевидной.
Попробуй переписать в тетрадь код. Потом перепиши его в редактор, запусти, проверь на ошибки. Ищи ошибки сам, желательно по докам. Ответь на вопрос - откуда взялась эта ошибка и как ее больше не совершать?
Потом попробуй уйти от примера. Добавь сам что то новое, попробуй изучить новое путем практики. И также понимай сам код.
Такой метод обучения долгий, но действенный. Учась по такому, ты хоть и будешь отставать по времени, но зато ты прокачаешь не только навык программирования, но и другие (такие как проблем солвинг, анализ кода).
#Learning@hex_warehouse #Code@hex_warehouse
👍4 1
#HEX • IT
ORM, или объектно-реляционное отображение — это программная технология, которая позволяет взаимодействовать с базами данных с использованием объектно-ориентированной парадигмы. Вместо того чтобы писать SQL-запросы напрямую для работы с данными в базе данных…
Сможем до следующей неделе набрать +30 на этой статье?
👍2
Абстрактное синтаксическое дерево (AST) в Python — это древовидное представление структуры фрагмента кода. Каждый узел в дереве представляет конструкцию программирования, такую как переменная, функция или оператор потока управления.
Некоторые примеры использования AST:
Линтеры и форматеры кода. Инструменты вроде pylint и Black используют AST для анализа и соблюдения стандартов кодирования и рекомендаций по стилю.
Оптимизация кода. Анализируя и изменяя AST, можно выполнять различные оптимизации кода, например, сворачивать константы, удалять мёртвый код и встраивать функции.
Генерация кода. AST можно использовать для генерации кода из спецификаций высокого уровня, таких как специальные языки или графические среды программирования.
Метапрограммирование. Манипуляции с AST позволяют реализовывать продвинутые методы программирования, такие как декораторы, макросы или переписывание кода.
Некоторые примеры использования AST:
Линтеры и форматеры кода. Инструменты вроде pylint и Black используют AST для анализа и соблюдения стандартов кодирования и рекомендаций по стилю.
Оптимизация кода. Анализируя и изменяя AST, можно выполнять различные оптимизации кода, например, сворачивать константы, удалять мёртвый код и встраивать функции.
Генерация кода. AST можно использовать для генерации кода из спецификаций высокого уровня, таких как специальные языки или графические среды программирования.
Метапрограммирование. Манипуляции с AST позволяют реализовывать продвинутые методы программирования, такие как декораторы, макросы или переписывание кода.
👍2
Пример создания AST из скрипта на Python:
Пример вывода AST для простой программы Python:
Пример скрипта для оптимизации кода:
Этот оптимизатор находит конкатенацию строковых литералов и объединяет их на этапе компиляции, что улучшает производительность.
Для тех, кто хочет глубже погрузиться в тему, рекомендую изучить следующие аспекты:
- Работа с типами данных и аннотациями через AST
- Создание собственных декораторов с помощью трансформации AST
- Оптимизация циклов и условных конструкций
- Анализ потока данных в программе
import ast
code = "x = 5 + 3"
tree = ast.parse(code)
print(tree)
Пример вывода AST для простой программы Python:
import ast
my_tree = ast.parse("3 + 4*x")
print(ast.dump(my_tree))
Пример скрипта для оптимизации кода:
class StringOptimizer(ast.NodeTransformer):
def visit_BinOp(self, node):
# Оптимизация конкатенации строк
if isinstance(node.op, ast.Add):
if isinstance(node.left, ast.Constant) and isinstance(node.right, ast.Constant):
if isinstance(node.left.value, str) and isinstance(node.right.value, str):
return ast.Constant(value=node.left.value + node.right.value)
return node
Этот оптимизатор находит конкатенацию строковых литералов и объединяет их на этапе компиляции, что улучшает производительность.
Для тех, кто хочет глубже погрузиться в тему, рекомендую изучить следующие аспекты:
- Работа с типами данных и аннотациями через AST
- Создание собственных декораторов с помощью трансформации AST
- Оптимизация циклов и условных конструкций
- Анализ потока данных в программе
👍5
#HEX • IT
ORM, или объектно-реляционное отображение — это программная технология, которая позволяет взаимодействовать с базами данных с использованием объектно-ориентированной парадигмы. Вместо того чтобы писать SQL-запросы напрямую для работы с данными в базе данных…
Давайте попробуем +30 добить на статье)
👍1🔥1
Создал свой сайт портфолио - https://alexeev-prog-personalsite-3cd5.twc1.net/
#HEX • IT
ORM, или объектно-реляционное отображение — это программная технология, которая позволяет взаимодействовать с базами данных с использованием объектно-ориентированной парадигмы. Вместо того чтобы писать SQL-запросы напрямую для работы с данными в базе данных…
Ребят, сорян что опять прошу, но поставьте кто может плюс в рейтинг статьи. Это сильно мне поможет и мотивирует меня
👍3
Ближайшие статьи:
написаны, ждут публикации: роадмап DevOps инженера, создание веб Фреймворка на python
в процессе написания: интеграция C-расширений в python-приложения, как устроен BIOS и загрузчики ОС
написаны, ждут публикации: роадмап DevOps инженера, создание веб Фреймворка на python
в процессе написания: интеграция C-расширений в python-приложения, как устроен BIOS и загрузчики ОС
👍3 2🔥1
Вы не против, если я открою небольшой новогодний сбор на благо канала?
👍 - не против
👎 - против
👍 - не против
👎 - против
👍8 1
#HEX • IT
Вы не против, если я открою небольшой новогодний сбор на благо канала? 👍 - не против 👎 - против
Приятно что вы не против!
Обязуюсь находить качественный контент и писать качественные статьи.
Обязуюсь находить качественный контент и писать качественные статьи.
👍1🔥1
Новогодний Сбор На Благо Канала
Так как канал растет, а моя аппаратура уже не растет, нужно вложить средства в канал. Я работаю, но если вы хотите, вы можете поддержать наше небольшое сообщество
Сбербанк: 2202208157638702
Ton:
USDT TRC20:
Желательно на карту сбербанка.
Спасибо всем большое! Искренне каждого благодарю и обнимаю. Вы - те, кто дал мне новый буст в жизни.
Обещаю публиковать качественный контент. Возможно, и ютуб канал не за горами!
Так как канал растет, а моя аппаратура уже не растет, нужно вложить средства в канал. Я работаю, но если вы хотите, вы можете поддержать наше небольшое сообщество
Сбербанк: 2202208157638702
Ton:
UQCeNdt_oTXg9Y-oHuA7RDBA7MEzNKg-u-KCi6VH95VS9TlhUSDT TRC20:
TEWSFXhZmYmSm1ozVcE3615UzkZvRp5HVrЖелательно на карту сбербанка.
Спасибо всем большое! Искренне каждого благодарю и обнимаю. Вы - те, кто дал мне новый буст в жизни.
Обещаю публиковать качественный контент. Возможно, и ютуб канал не за горами!
❤3👍1
#HEX • IT
Ближайшие статьи: написаны, ждут публикации: роадмап DevOps инженера, создание веб Фреймворка на python в процессе написания: интеграция C-расширений в python-приложения, как устроен BIOS и загрузчики ОС
Интеграция C-расширений в питон очень интересная, кстати. Прикольно писать на си для питона, с его особенностями (например то что в питоне объект). Столько возможностей открывается
❤1👍1
