Гибадуллин Р.Ф., Викторов И.В. —
Неоднозначность результатов при использовании методов класса Parallel в рамках исполняющей среды .NET Framework
// Программные системы и вычислительные методы. – 2023. – № 2.
– 和。 1 - 14.
DOI: 10.7256/2454-0714.2023.2.39801
URL: https://e-notabene.ru/itmag/article_39801.html
阅读文章
注释,注释: Параллельное программирование – это способ написания программ, которые могут выполняться параллельно на нескольких процессорах или ядрах. Это позволяет программам обрабатывать большие объемы данных или выполнить более сложные вычисления за приемлемое время, чем это было бы возможно на одном процессоре. Преимущества параллельного программирования: увеличение производительности, распределение нагрузки, обработка больших объемов данных, улучшение отзывчивости, увеличение надежности. В целом, параллельное программирование имеет множество преимуществ, которые могут помочь улучшить производительность и надежность программных систем, особенно в условиях растущей сложности вычислительных задач и объемов данных. Однако параллельное программирование также может иметь свои сложности, связанные с управлением синхронизацией, гонками данных и другими аспектами, которые требуют дополнительного внимания и опыта со стороны программиста. В ходе тестирования параллельных программ можно получить неоднозначные результаты. Например, это может происходить, когда мы оптимизируем объединение данных типа float или double посредством методов For или ForEach класса Parallel. Подобное поведение программы заставляет усомниться в потокобезопасности написанного кода. Такой вывод может быть неправильным и преждевременным. Статья раскрывает возможную причину неоднозначности результатов, получаемых параллельной программой, и предлагает лаконичное решение вопроса.
Abstract: Parallel programming is a way of writing programs that can run in parallel on multiple processors or cores. This allows programs to process large amounts of data or perform more complex calculations in a reasonable amount of time than would be possible on a single processor. The advantages of parallel programming: increased performance, load sharing, processing large amounts of data, improved responsiveness, increased reliability. In general, parallel programming has many advantages that can help improve the performance and reliability of software systems, especially with the increasing complexity of computational tasks and data volumes. However, parallel programming can also have its own complexities related to synchronization management, data races, and other aspects that require additional attention and experience on the part of the programmer. When testing parallel programs, it is possible to get ambiguous results. For example, this can happen when we optimize concatenation of float- or double-type data by means of For or ForEach methods of the Parallel class. Such behavior of a program makes you doubt about the thread safety of the written code. Such a conclusion can be incorrect and premature. The article reveals a possible reason for ambiguity of the results received by a parallel program and offers a concise solution of the question.
Викторов И.В., Гибадуллин Р.Ф. —
Разработка синтаксического дерева для автоматизированного транслятора последовательного программного кода в параллельный код для многоядерных процессоров
// Программные системы и вычислительные методы. – 2023. – № 1.
– 和。 13 - 25.
DOI: 10.7256/2454-0714.2023.1.38483
URL: https://e-notabene.ru/itmag/article_38483.html
阅读文章
注释,注释: Появление многоядерных архитектур чрезвычайно стимулировало область параллельных вычислений. Однако разработка параллельной программы и ручное распараллеливание унаследованных последовательных программных кодов являются трудоемкой работой, программист должен обладать хорошими навыками применения методов параллельного программирования. Данное обстоятельство определяет актуальность предмета исследования работы – разработка транслятора последовательного кода в параллельный. В статье приводится обзор существующих решений в рамках выбранного направления исследований, рассматриваются их преимущества и недостатки. Предлагается принцип формирования синтаксического дерева, который основан на JSON формате (текстовый формат обмена данными, основанный на JavaScript), и разбирается пример формирования синтаксического дерева на основе данного принципа. Результатом работы является подход к построению программной платформы трансляции последовательного кода в параллельный. Отличительной особенностью разработанной платформы является web-сервис, который потенциально позволяет расширить транслятор другими языками программирования. Взаимодействие с программной средой осуществляется посредством REST-запросов (HTTP-запросов, предназначенных для вызова удаленных процедур). Разработанная программная платформа состоит из трёх модулей: модуль обработки запросов, обеспечивающий взаимодействие с внешними системами посредством REST-запросов; модуль построения дерева, служащий для формирования синтаксического дерева на основе исходного программного кода; модуль преобразования кода, получающий параллельный программный код на основе синтаксического дерева.
Abstract: The emergence of multicore architectures has extremely stimulated the area of parallel computing. However, developing a parallel program and manually paralleling inherited sequential program codes are time-consuming work. The programmer should have good skills in using parallel programming methods. This fact determines the relevance of the subject of the research – the development of a serial-to-parallel code translator. The article gives a review of existing solutions in the chosen direction of research and considers their advantages and disadvantages. The principle of formation of a syntactic tree which is based on JSON format (the text format of data exchange based on JavaScript) is offered and an example of formation of a syntactic tree on the basis of this principle is considered. The result of the work is an approach for building a program platform for translating sequential code into parallel code. The distinctive feature of the developed platform is the web-service, which potentially allows you to extend the translator with other programming languages. The interaction with the programming environment is realized by means of REST-requests (HTTP-requests designed to call remote procedures). The developed software platform consists of three modules: the query processing module, which provides interaction with external systems through REST-requests; the tree building module, which forms a syntax tree on the basis of the source program code; the code conversion module, which obtains parallel program code on the basis of the syntax tree.
Гибадуллин Р.Ф. —
Потокобезопасные вызовы элементов управления в обогащенных клиентских приложениях
// Программные системы и вычислительные методы. – 2022. – № 4.
– 和。 1 - 19.
DOI: 10.7256/2454-0714.2022.4.39029
URL: https://e-notabene.ru/itmag/article_39029.html
阅读文章
注释,注释: Когда была выпущена первая версия .NET Framework в обогащенных клиентских приложениях существовал шаблон, ориентированный на циклы обработки сообщений, где использовалась встроенная очередь для передачи единиц исполнения из рабочих потоков. Далее было разработано обобщенное решение ISynchronizeInvoke, в рамках которого поток-источник может поставить делегат в очередь к потоку-приемнику и, как необязательный вариант, ожидать завершения этого делегата. После введения поддержки асинхронных страниц в архитектуру ASP.NET шаблон ISynchronizeInvoke не походил, так как асинхронные ASP.NET-страницы не сопоставлены с единственным потоком. Это стало причиной создания ещё более обобщенного решения – SynchronizationContext, что и является предметом исследования. В статье на практических примерах представлено, как следует обновлять элементы пользовательского интерфейса из рабочих потоков, не нарушая потокобезопасность пользовательского приложения. В этом аспекте предлагаются решения: с применением методов Beginlnvoke или Invoke для постановки этого делегата в очередь сообщений потока пользовательского интерфейса; с захватом контекста синхронизации потока пользовательского интерфейса посредством свойства Current класса SynchronizationContext; с применением устаревшего класса BackgroundWorker, обеспечивающий неявный захват контекста синхронизации потока пользовательского интерфейса. Не оставлена без внимания особенность реализации абстрактного класса SynchronizationContext в платформе ASP.NET. Сформированы практические рекомендации по использованию механизма маршализации на примере разработки мультиклиентного чата с централизованным сервером.
Abstract: When the first version of the .NET Framework was released, there was a pattern in enriched client applications that focused on message processing loops, where an embedded queue was used to pass execution units from worker threads. A generalized ISynchronizeInvoke solution was then developed in which the source thread could queue a delegate to the destination thread and, as an optional option, wait for that delegate to complete. After asynchronous page support was introduced into the ASP.NET architecture, the ISynchronizeInvoke pattern did not work because asynchronous ASP.NET pages are not mapped to a single thread. This was the reason for creating an even more generalized solution – SynchronizationContext, which is the subject of the research. The article uses practical examples to show how to update UI elements from worker threads without breaking thread-safety of the user application. Solutions proposed in this aspect are: using Beginlnvoke or Invoke methods to put this delegate into the UI thread message queue; capturing the UI thread synchronization context via the Current property of the SynchronizationContext class; using the deprecated BackgroundWorker class, which provides an implicit capture of the UI thread synchronization context. The peculiarity of implementation of the SynchronizationContext abstract class in ASP.NET platform is not left unnoticed. Practical recommendations on the use of marshalling mechanism on the example of development of multiclient chat with a centralized server are formulated.