Многопоточное приложение на Nasm - Assembler - Ответ 10498526

А в чём смысл разделять всё это на 4 приложения, почему нельзя сделать всё в одном? В самом простом варианте можно даже не заморачиваться с потоками, а просто запускать новые экземпляры приложения. Ну или при поступлении данных запускать новые потоки, которые последовательно выполняют действия 1, 2, 3, 4 – в одном коде (не как 4 потока, а как один, всё равно же всё делается последовательно). Это если надо сделать так, чтобы можно было одновременно запускать в работу несколько блоков данных для обработки.

Поступили данные – создался поток, который их получает (или ему передаются эти данные – в зависимости от того, как это устроено), затем он же обрабатывает, а после обработки поток автоматом уничтожается. Пока этот поток получает/обрабатывает данные, основной поток ждёт новых данных, чтобы создать ещё один поток. Если прогу пытаются закрыть, то она ждёт завершения всех потоков и завершает свою работу.

Если нужно получать общий доступ к файлам, то тут можно использовать либо мьютексы/ивенты (для разных экземпляров приложения), либо критические секции, либо просто открывать файлы эксклюзивно (т.е. без доступа на чтение/запись другими потоками), а остальные потоки будут ждать, когда они освободятся. Можно даже очередь сделать при желании (чтобы потоки заходили в эти критические секции в порядке очереди).

При всём при этом даже не факт, что это всё нужно писать именно на ассемблере. Если сделать на C++ или Delphi, скорость разработки может быть выше, а скорость работы примерно такая же (а SSE/AVX-код можно добавить вставками при необходимости, хотя MSVC++ умеет оптимизировать циклы с использованием SIMD-инструкций).

Что эти приложения делают вообще? Как они получают данные (из сети через запрос к серверу, от устройства или ещё как-то), что это за данные, что они делают с этими данными, какие общие ресурсы у них есть?

Вернуться к обсуждению:

Многопоточное приложение на Nasm Assembler