Добавлено руководство по созданию графических приложений с помощью GTK на C#
https://metanit.com/sharp/gtk/1.1.php
#csharp #gtk
https://metanit.com/sharp/gtk/1.1.php
#csharp #gtk
👍33🔥6❤3🤨3💩1
Concurrency (конкурентность) и Parallelism (параллелизм) — два термина, которые часто путают. Но понимание параллелизма и конкурентности имеет важное значение для создания высокопроизводительных и эффективных программных решений.
Конкурентность предполагает управление несколькими задачами одновременно, их смешивание для оптимизации использования ресурсов.
Параллелизм предполагает выполнение нескольких задач одновременно.
Как лаконично выразился Роб Пайк (один из создателей Golang): «конкурентность — это работа с большим количеством вещей одновременно. Параллелизм — это выполнение большого количества вещей одновременно».
Что такое конкурентность?
В современных системах конкурентность обусловлена принципами проектирования, которые гарантируют эффективную работу задач или процессов независимо от того, имеет ли оборудование один или несколько процессоров.
Даже при наличии одного процессора/ядра шаблоны конкурентности позволяют задачам эффективно разделять процессорное время. Это создает иллюзию параллельного выполнения.
Эти шаблоны также позволяют выполнять части программы не по порядку, а в частичном порядке, сохраняя при этом предполагаемое поведение программы.
Что такое параллелизм?
В то время как параллелизм заключается в обработке многих задач одновременно (управление задачами), параллелизм заключается в выполнении многих задач одновременно (выполнение задач).
Параллелизм требует аппаратной поддержки, например многоядерных или многопроцессорных систем, чтобы обеспечить одновременное выполнение различных задач.
Это различие между конкурентностью (управлением задачами) и параллелизмом (выполнением задач) существенно влияет на производительность и эффективность приложений.
Параллелизм особенно полезен для приложений с интенсивными вычислениями, где задачи можно распределить между несколькими процессорами для конкуретного выполнения, что обеспечивает более быструю и эффективную обработку.
Асинхронное программирование используется для достижения конкурентности в однопоточных средах.
Такой подход позволяет программе инициировать задачи, не дожидаясь завершения предыдущих, управляя несколькими задачами неблокирующим образом.
Отличным примером является Node.js, который применяет конкурентность в однопоточной модели с использованием обратных вызовов и циклов событий.
Между тем, многопоточные среды (например, C#) способствуют как параллелизму, так и конкурентности. Они обеспечивают как конкурентное выполнение задач, так и настоящее параллельное выполнение на нескольких процессорах или ядрах одновременно.
Конкурентность предполагает управление несколькими задачами одновременно, их смешивание для оптимизации использования ресурсов.
Параллелизм предполагает выполнение нескольких задач одновременно.
Как лаконично выразился Роб Пайк (один из создателей Golang): «конкурентность — это работа с большим количеством вещей одновременно. Параллелизм — это выполнение большого количества вещей одновременно».
Что такое конкурентность?
В современных системах конкурентность обусловлена принципами проектирования, которые гарантируют эффективную работу задач или процессов независимо от того, имеет ли оборудование один или несколько процессоров.
Даже при наличии одного процессора/ядра шаблоны конкурентности позволяют задачам эффективно разделять процессорное время. Это создает иллюзию параллельного выполнения.
Эти шаблоны также позволяют выполнять части программы не по порядку, а в частичном порядке, сохраняя при этом предполагаемое поведение программы.
Что такое параллелизм?
В то время как параллелизм заключается в обработке многих задач одновременно (управление задачами), параллелизм заключается в выполнении многих задач одновременно (выполнение задач).
Параллелизм требует аппаратной поддержки, например многоядерных или многопроцессорных систем, чтобы обеспечить одновременное выполнение различных задач.
Это различие между конкурентностью (управлением задачами) и параллелизмом (выполнением задач) существенно влияет на производительность и эффективность приложений.
Параллелизм особенно полезен для приложений с интенсивными вычислениями, где задачи можно распределить между несколькими процессорами для конкуретного выполнения, что обеспечивает более быструю и эффективную обработку.
Асинхронное программирование используется для достижения конкурентности в однопоточных средах.
Такой подход позволяет программе инициировать задачи, не дожидаясь завершения предыдущих, управляя несколькими задачами неблокирующим образом.
Отличным примером является Node.js, который применяет конкурентность в однопоточной модели с использованием обратных вызовов и циклов событий.
Между тем, многопоточные среды (например, C#) способствуют как параллелизму, так и конкурентности. Они обеспечивают как конкурентное выполнение задач, так и настоящее параллельное выполнение на нескольких процессорах или ядрах одновременно.
👍18🔥2👏2
This media is not supported in your browser
VIEW IN TELEGRAM
(Анимация к предыдущему посту)
👍23🔥5👎1👏1
11 ключевых аспектов проектирования системы и системного дизайна:
1. Основы проектирования систем
Основа дизайна приложений представляют следующие концепции: масштабируемость, типы архитектуры, прокси, балансировщики нагрузки, монолит/микросервисы.
2. Сетевое взаимодействие и коммуникация
Принципы работы служб — от IP-адресации и межсетевых экранов до REST и gRPC, TLS, шлюзов API и обнаружения служб.
3. Кэширование
Стратегии кэширования и связанные темы — Redis, TTL, аннулировании кэша, CDN и локальных и глобальных уровнях кэширования.
4. Балансировка нагрузки
Эффективное распределение трафика, такие стратегии, как Round Robin, Least Connections, IP Hash, global LB, sticky sessions и проверки работоспособности.
5. Управление данными
Управление выбором базы и схемы данных с учетом принципов SQL/NoSQL, ACID или BASE, сегментирования, репликации и разделения данных.
6. Асинхронная обработка
Отвязывание систем друг от друга, применение очередей, событийно-ориентированная архитектура, Pub/Sub, веб-хуки, очереди повторных попыток (retry queue) и такие шаблоны, как исходящие сообщения (outbox) и источник событий (event sourcing).
7. Системы хранения и файловые системы
Неструктурированные и структурированные данные с помощью S3, EFS, BLOB-объектов, фрагментации, сжатия, озер данных и последовательного хеширования.
8. Последовательность и доступность
Обеспечение корректности распределенных систем с помощью строгой/конечной согласованности (strong/eventual consistency), протоколов консенсуса (consensus protocols), распределенных блокировок (distributed lock), векторных часов (vector clock) и кворума (quorum).
9. Отказоустойчивость
Проектирование систем, которые сами восстанавливаются с помощью повторных попыток, автоматических выключателей (circuit breaker), переборок (bulkhead), хаос-инжиниринга и стратегий постепенной деградации.
10. Мониторинг
Отслеживание, отладка и оптимизация производительности с помощью метрик, трассировок, стека ELK, OpenTelemetry, проверок работоспособности и инструментов оповещения.
11. Безопасность и аутентификация
Защита системы с помощью OAuth, JWT, RBAC, защиты от CSRF/XSS, TLS и поставщиков удостоверений, таких как Auth0 и Okta.
1. Основы проектирования систем
Основа дизайна приложений представляют следующие концепции: масштабируемость, типы архитектуры, прокси, балансировщики нагрузки, монолит/микросервисы.
2. Сетевое взаимодействие и коммуникация
Принципы работы служб — от IP-адресации и межсетевых экранов до REST и gRPC, TLS, шлюзов API и обнаружения служб.
3. Кэширование
Стратегии кэширования и связанные темы — Redis, TTL, аннулировании кэша, CDN и локальных и глобальных уровнях кэширования.
4. Балансировка нагрузки
Эффективное распределение трафика, такие стратегии, как Round Robin, Least Connections, IP Hash, global LB, sticky sessions и проверки работоспособности.
5. Управление данными
Управление выбором базы и схемы данных с учетом принципов SQL/NoSQL, ACID или BASE, сегментирования, репликации и разделения данных.
6. Асинхронная обработка
Отвязывание систем друг от друга, применение очередей, событийно-ориентированная архитектура, Pub/Sub, веб-хуки, очереди повторных попыток (retry queue) и такие шаблоны, как исходящие сообщения (outbox) и источник событий (event sourcing).
7. Системы хранения и файловые системы
Неструктурированные и структурированные данные с помощью S3, EFS, BLOB-объектов, фрагментации, сжатия, озер данных и последовательного хеширования.
8. Последовательность и доступность
Обеспечение корректности распределенных систем с помощью строгой/конечной согласованности (strong/eventual consistency), протоколов консенсуса (consensus protocols), распределенных блокировок (distributed lock), векторных часов (vector clock) и кворума (quorum).
9. Отказоустойчивость
Проектирование систем, которые сами восстанавливаются с помощью повторных попыток, автоматических выключателей (circuit breaker), переборок (bulkhead), хаос-инжиниринга и стратегий постепенной деградации.
10. Мониторинг
Отслеживание, отладка и оптимизация производительности с помощью метрик, трассировок, стека ELK, OpenTelemetry, проверок работоспособности и инструментов оповещения.
11. Безопасность и аутентификация
Защита системы с помощью OAuth, JWT, RBAC, защиты от CSRF/XSS, TLS и поставщиков удостоверений, таких как Auth0 и Okta.
👍6👏2🔥1
Вышла новая версия популярного набора компиляторов GCC - GCC 15 (формально GCC 15.1). Напомню, что каждый новый релиз мажорной версии выходит раз в год (так GCC 14 вышел в мае 2024 года.)
Основные изменения в GCC 15:
- добавлен интерфейс компилятора COBOL;
- доработаны интерфейсы GCC на языках D и Modula-2, а также интерфейс Fortran.
- улучшена поддержка новых стандартов языков C и C++ (для C по умолчанию применяется стандарт C23);
- добавлена поддержка новых процессоров (AMD Zen 5 и znver5 среди других новых оптимизаций AMD Zen, Intel Xeon 7 Diamond Rapids, поддержка Intel AVX10.2, больше возможностей Intel Advanced Performance Extensions APX, удалена поддержка Xeon Phi, улучшения в работе с OpenMP);
- доработаны возможности ISA;
- улучшена поддержка для языка Rust (для gccrs);
- бекэнд AMDGPU для графических процессоров AMD теперь также поддерживает стандартную библиотеку C++ (libstdc++);
- улучшена экспериментальная поддержка для универсальных устройств;
- бекэнд NVIDIA NVPTX с GCC15 также поддерживает libstdc++;
https://gcc.gnu.org/gcc-15/changes.html
Основные изменения в GCC 15:
- добавлен интерфейс компилятора COBOL;
- доработаны интерфейсы GCC на языках D и Modula-2, а также интерфейс Fortran.
- улучшена поддержка новых стандартов языков C и C++ (для C по умолчанию применяется стандарт C23);
- добавлена поддержка новых процессоров (AMD Zen 5 и znver5 среди других новых оптимизаций AMD Zen, Intel Xeon 7 Diamond Rapids, поддержка Intel AVX10.2, больше возможностей Intel Advanced Performance Extensions APX, удалена поддержка Xeon Phi, улучшения в работе с OpenMP);
- доработаны возможности ISA;
- улучшена поддержка для языка Rust (для gccrs);
- бекэнд AMDGPU для графических процессоров AMD теперь также поддерживает стандартную библиотеку C++ (libstdc++);
- улучшена экспериментальная поддержка для универсальных устройств;
- бекэнд NVIDIA NVPTX с GCC15 также поддерживает libstdc++;
https://gcc.gnu.org/gcc-15/changes.html
🔥9👍4❤2👏1
Вышла в релиз первая версия среды разработки OpenIDE. Решение создано компаниями «Группа Астра», Axiom JDK и Haulmont на базе IntelliJ IDEA. OpenIDE представляет собой бесплатный и полностью открытый инструмент для Java‑программистов. Среда готова к использованию в реальных проектах.
Основные моменты первого релиза:
-поддержка самой свежей Java 24 "из коробки",
-собственный маркетплейс с 350+ плагинами,
-полноценная работа с Git, Gradle, Maven
-LSP-расширения для Python, Scala, Kotlin,
-открытый исходный код (AGPLv3), собственные серверы обновлений и телеметрии (никакой привязки к JetBrains)
-поддержка Spring и корпоративных технологий.
Оф сайт: https://openide.ru/
Основные моменты первого релиза:
-поддержка самой свежей Java 24 "из коробки",
-собственный маркетплейс с 350+ плагинами,
-полноценная работа с Git, Gradle, Maven
-LSP-расширения для Python, Scala, Kotlin,
-открытый исходный код (AGPLv3), собственные серверы обновлений и телеметрии (никакой привязки к JetBrains)
-поддержка Spring и корпоративных технологий.
Оф сайт: https://openide.ru/
👍14🎃8👎3🔥2
После того, как разработчики обнаружили сломанную поддержка регистрозависимости в файловой системе Bcachefs для Linux 6.15 и отправили ее на исправление, Линус Торвальдс написал длинный пост, где жестко прошелся по проблемам регистрозависимости в файловых системах:
"Единственный урок, который нужно усвоить, заключается в том, что люди, работающие с файловыми системами, никогда не учатся. Нечувствительные к регистру имена — это ужасно неправильно, и вам вообще не следовало бы их делать. Проблема была не в отсутствии тестирования, проблема была в его реализации в первую очередь."
"Люди, которые делают нечувствительность к регистру *НЕИЗБЕЖНО* делать что-то вроде игнорирования непечатаемых символов, так что теперь «нечувствительный к регистру» также означает «нечувствительный к другим вещам»."
"Чувствительность к регистру — это БАГ (примечание: в оригинале так, но видимо тут описка и имелось в виде НЕчувствительность к регистру - это баг). Тот факт, что люди, которые работают над файловой системой, *все еще* думают, что это фича, я не могу понять. Как будто они так почитают старую файловую систему FAT, что им приходится ее переделывать — ужасно"."
Оригинал: https://lore.kernel.org/lkml/CAHk-=wjajMJyoTv2KZdpVRoPn0LFZ94Loci37WLVXmMxDbLOjg@mail.gmail.com/
"Единственный урок, который нужно усвоить, заключается в том, что люди, работающие с файловыми системами, никогда не учатся. Нечувствительные к регистру имена — это ужасно неправильно, и вам вообще не следовало бы их делать. Проблема была не в отсутствии тестирования, проблема была в его реализации в первую очередь."
"Люди, которые делают нечувствительность к регистру *НЕИЗБЕЖНО* делать что-то вроде игнорирования непечатаемых символов, так что теперь «нечувствительный к регистру» также означает «нечувствительный к другим вещам»."
"Чувствительность к регистру — это БАГ (примечание: в оригинале так, но видимо тут описка и имелось в виде НЕчувствительность к регистру - это баг). Тот факт, что люди, которые работают над файловой системой, *все еще* думают, что это фича, я не могу понять. Как будто они так почитают старую файловую систему FAT, что им приходится ее переделывать — ужасно"."
Оригинал: https://lore.kernel.org/lkml/CAHk-=wjajMJyoTv2KZdpVRoPn0LFZ94Loci37WLVXmMxDbLOjg@mail.gmail.com/
😁11👍5👎1👏1
В этом месяце исполняется 60 лет с тех пор, как в 1965 году Кули и Тьюки представили быстрое преобразование Фурье (БПФ) — один из важнейших алгоритмов в обработке сигналов и анализе данных.
В 1805 году Гаусс, изучая орбиты астероидов Паллада и Юнона, придумал метод интерполяции их траекторий по дискретным образцам. То, что он придумал, было математически очень близко к современному БПФ, но Гаусс никогда не публиковал эту работу и не анализировал ее вычислительную сложность. Она предшествовала даже работе Фурье 1822 года о диффузии тепла — но без обрамления или обобщения, которые Кули и Тьюки внесут 160 лет спустя.
В 1965 году Кули и Тьюки опубликовали свой ныне знаменитый алгоритм, который снизил стоимость вычисления дискретного преобразования Фурье с 𝑂 ( 𝑛 ²) до 𝑂 ( 𝑛 log 𝑛 ). Этот скачок сделал возможными обработку сигналов в реальном времени и сжатие цифровых медиаданных.
В итоге сегодня это один из самых важных алгоритмов 20-го века, применяемых в самых различных сценариях.
В 1805 году Гаусс, изучая орбиты астероидов Паллада и Юнона, придумал метод интерполяции их траекторий по дискретным образцам. То, что он придумал, было математически очень близко к современному БПФ, но Гаусс никогда не публиковал эту работу и не анализировал ее вычислительную сложность. Она предшествовала даже работе Фурье 1822 года о диффузии тепла — но без обрамления или обобщения, которые Кули и Тьюки внесут 160 лет спустя.
В 1965 году Кули и Тьюки опубликовали свой ныне знаменитый алгоритм, который снизил стоимость вычисления дискретного преобразования Фурье с 𝑂 ( 𝑛 ²) до 𝑂 ( 𝑛 log 𝑛 ). Этот скачок сделал возможными обработку сигналов в реальном времени и сжатие цифровых медиаданных.
В итоге сегодня это один из самых важных алгоритмов 20-го века, применяемых в самых различных сценариях.
👍42🔥2👏1
Росстат: компании остро нуждаются в разработчиках сайтов и аналитиках
Статслужба опубликовала исследование о потребности среднего и крупного бизнеса России в сотрудниках (за исключением компаний из сфер финансов, государственного управления и обеспечения военной безопасности, деятельности общественных и экстерриториальных организаций). Обследование проводится раз в два года, свежие данные представлены за 2024 год.
Среди IT-профессий, по данным Росстата, наиболее серьезная потребность в специалистах-техниках по web, которые обеспечивают работу сайтов, веб-серверного оборудования и программного обеспечения. Незакрытыми в экономике является 44% всех таких рабочих мест.
Вакантно и каждое десятое рабочее место среди разработчиков web и мультимедийных приложений, каждое одиннадцатое - среди системных аналитиков.
Достаточно остро стоит потребность в сисадминах (6,9%), специалистах поддержки пользователей (6,8%), специалистах по базам данных (6,7%), а также в дизайнерах и администраторах баз данных (6,1%). Что касается разработчиков программного обеспечения, у работодателей вакантно для них 6% рабочих мест.
https://ria.ru/20250427/professii-2013654276.html
Статслужба опубликовала исследование о потребности среднего и крупного бизнеса России в сотрудниках (за исключением компаний из сфер финансов, государственного управления и обеспечения военной безопасности, деятельности общественных и экстерриториальных организаций). Обследование проводится раз в два года, свежие данные представлены за 2024 год.
Среди IT-профессий, по данным Росстата, наиболее серьезная потребность в специалистах-техниках по web, которые обеспечивают работу сайтов, веб-серверного оборудования и программного обеспечения. Незакрытыми в экономике является 44% всех таких рабочих мест.
Вакантно и каждое десятое рабочее место среди разработчиков web и мультимедийных приложений, каждое одиннадцатое - среди системных аналитиков.
Достаточно остро стоит потребность в сисадминах (6,9%), специалистах поддержки пользователей (6,8%), специалистах по базам данных (6,7%), а также в дизайнерах и администраторах баз данных (6,1%). Что касается разработчиков программного обеспечения, у работодателей вакантно для них 6% рабочих мест.
https://ria.ru/20250427/professii-2013654276.html
РИА Новости
Названы профессии, в которых остро нуждаются российские компании
Российские компании наиболее остро нуждаются в специалистах-техниках по web, разработчиках сайтов и приложений, а также в системных аналитиках, следует из... РИА Новости, 28.04.2025
🤡8🔥7🙏4👍1👎1👏1
Добавлена статья про Ассемблерные вставки в программе на языке Си
https://metanit.com/c/tutorial/10.3.php
#c_ansi
https://metanit.com/c/tutorial/10.3.php
#c_ansi
Metanit
Язык программирования Си | Ассемблерные вставки
Ассемблерные вставки в программе на языке Си, оператор asm, входные и выходные параметры, дескрипторы регистров процессора
👍12🔥9🍓3
Microsoft не прекращает попыток втюхать пользователям Windows 10 новую версию Windows с CopilotAI
В конце апреля 2025 года Microsoft выпустил обновление Windows 10 с полноэкранным баннером, где настоятельно советует пользователям старых ПК с Windows 10 купить новый ПК с Windows 11 и поддержкой опций Copilot+ AI, потому что якобы такая система лучше и продуктивнее.
Microsoft напомнил, что поддержка Windows 10 заканчивается 14 октября 2025 года, и сейчас самое время обновиться до Windows 11
«Поскольку поддержка Windows 10 заканчивается 14 октября 2025 года, сейчас самое время обновиться до современного, более безопасного ПК с Windows 11 или Copilot+ PC», — предупредила Microsoft миллионы пользователей, которые всё ещё используют Windows 10.
«Системы Copilot+ PC предлагают невероятную мощность с повышенной производительностью, автономной работой от батареи в течение всего дня и функциями ИИ следующего поколения — что делает сейчас самое разумное время для покупки такого нового ПК», — пояснили в компании,
В конце апреля 2025 года Microsoft выпустил обновление Windows 10 с полноэкранным баннером, где настоятельно советует пользователям старых ПК с Windows 10 купить новый ПК с Windows 11 и поддержкой опций Copilot+ AI, потому что якобы такая система лучше и продуктивнее.
Microsoft напомнил, что поддержка Windows 10 заканчивается 14 октября 2025 года, и сейчас самое время обновиться до Windows 11
«Поскольку поддержка Windows 10 заканчивается 14 октября 2025 года, сейчас самое время обновиться до современного, более безопасного ПК с Windows 11 или Copilot+ PC», — предупредила Microsoft миллионы пользователей, которые всё ещё используют Windows 10.
«Системы Copilot+ PC предлагают невероятную мощность с повышенной производительностью, автономной работой от батареи в течение всего дня и функциями ИИ следующего поколения — что делает сейчас самое разумное время для покупки такого нового ПК», — пояснили в компании,
🤡36👍4🥱3😁1