Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Как правильно поступить для потокобезопасности

17.02.2024, 07:19. Показов 3916. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Есть код, обрабатывающий побайтно файл, заранее загруженный в byte[]. Потоки организуются средствами C# через Parallel.ForEach вот таким образом:
C#
1
2
3
4
5
6
7
8
9
Parallel.ForEach(num, ii =>
{
    // много всего тут исполняется
 
    if (max < (end - start))
    {
        Interlocked.Exchange(ref max, end - start);
    }
});
Вопрос 1 - как я понимаю может возникнуть ситуация когда условие if выполнится, в другом потоке max изменится и когда будет исполняться Exchange, то оно по сути испортит данные? Логичнее ли сделать через lock весь if?

Вопрос 2 - как правильно покидать Parallel.ForEach внутри кода, если там не получается использовать break? Я сейчас просто делаю метку к концу и прыгаю туда goto.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2024, 07:19
Ответы с готовыми решениями:

Как правильно поступить?
Если я пишу код в обработчике события, в котором происходит инициация следующего обработчика события, то эта цепочка может выполнятся...

Как правильно поступить
Есть два запроса. За пример возьму: russian photography russian photographer Протупил и заказал текст под эти два запроса....

как правильно поступить?
ребята, подскажите, как правильно поступить... наряду с остальными была проиндексирована определенная страница сайта со текстом о...

62
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 09:23  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что за код вы тестируете?
какая разница? Я не публикую свой код.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если вот этот
Цитата Сообщение от Элд Хасп Посмотреть сообщение
То это бессмыслица. И выдаёт бессмысленный результат
нет, не этот

Цитата Сообщение от Элд Хасп Посмотреть сообщение
То общий результат зависим от соотношения длительности // много всего тут исполняется, трат на создание запуск отдельных задач, и трат на локировку для аккумуляцию результата.
Так как у нас нет понимания что за код // много всего тут исполняется, то для нас результат вашего теста тоже полная бесмыслица.
И почему же он бессмыслица? У меня есть код, который я реализовал в однопоточном и многопоточном варианте. Результаты в таблице. Так же я взял за основу код Wolfdp и переписал свой многопоточный вариант и (для меня это очевидно без тестов, тесты я показываю вам, вы же не поверите мне на слово) этот вариант очень медленный и кушает оперативку.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
То здесь ещё нужна оценка длительности скачки файла
Зачем? Это обстоятельство одинаковое для всех тестируемых вариантов и вынесено за бенчмарк. Сам бенчмарк работает с ОЗУ.

Цитата Сообщение от Wolfdp Посмотреть сообщение
на какой длине строки вы проверяли?
1х900000 ~ 900K
100х900000 ~ 90M
1000х900000 ~ 900M

Цитата Сообщение от Wolfdp Посмотреть сообщение
А, ещё такой момент -- batch задавили часом не тоже по 5?
я использовал значение 500 для вашего кода, у меня значения плавающие, моя реализация еще до мыслей использовать многопоточность, уже работала с разными размерами batch, но потом я стал его менять динамически по ходу выполнения.
Мне сложно объяснить конкретно, так как пример не соответствует моему коду и самой задаче. Но не переживайте, ваше решение (сама идея) это то, что уже у меня было реализовано, так что вы всё написали правильно, просто реализация на C# у вас медленная, я же правильно понимаю что там используется LINQ (или как там правильно называются SQL-подобные вставки)? А он очень медленный и прожорливый. Я его не умею готовить, это понятно, но когда что-то читаю на SO или здесь и потом смотрю на результат, то всегда всё печально, но несомненно короткий код и быстрая реализация. Если требуется то переписываю так как мне нужно.

Добавлено через 10 минут
C#
1
2
3
4
5
for (var i = 0; i < source.Length; i += batch)
{
    var start = i; //!!!!!
    tasks.Add(Task.Run(() => Max(start)));
}
я правильно понимаю что у вас будет бесконечное число потоков ограниченное только размерностью строки?
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
26.02.2024, 09:40
Цитата Сообщение от belalugoci Посмотреть сообщение
я правильно понимаю что у вас будет бесконечное число потоков ограниченное только размерностью строки?
Не правильно понимаете, потоков будет не больше, чем можно взять из пула потоков.
0
Эксперт .NET
 Аватар для Usaga
14786 / 9560 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
26.02.2024, 09:54
Цитата Сообщение от belalugoci Посмотреть сообщение
А он очень медленный и прожорливый.
Вовсе нет. Просто надо понимать, где и как его можно использовать, а где - нет.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 10:43  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вовсе нет. Просто надо понимать, где и как его можно использовать, а где - нет.
ну так как я им пользоваться не умею, а подглядываю в интернете чужое, то тогда значит что большинство этим пользоваться не умеют, видимо это относится и к Wolfdp?

Цитата Сообщение от Uswer Посмотреть сообщение
Не правильно понимаете, потоков будет не больше, чем можно взять из пула потоков.
то есть при двух ядрах нельзя запустить таким образом 32 потока?

C#
1
tasks.Add(Task.Run(() => Max(start)));
List пухнет, старое не удаляется, может из-за этого раздуто потребление ОЗУ?
0
Эксперт .NET
 Аватар для Usaga
14786 / 9560 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
26.02.2024, 10:45
Цитата Сообщение от belalugoci Посмотреть сообщение
то тогда значит что большинство этим пользоваться не умеют,
Нет, только, кто жалуется)
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 10:51  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Нет, только, кто жалуется)
???
0
Эксперт .NET
 Аватар для Usaga
14786 / 9560 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
26.02.2024, 10:54
belalugoci, не умеют те, кто жалуется на прожорливость LINQ'а. Кто умеет пользоваться - вопросов к технологии не имеют.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 11:04  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
не умеют те, кто жалуется на прожорливость LINQ'а. Кто умеет пользоваться - вопросов к технологии не имеют
логически бессвязное утверждение.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
26.02.2024, 11:11
Цитата Сообщение от belalugoci Посмотреть сообщение
У меня есть код, который я реализовал в однопоточном и многопоточном варианте.
Есть несколько вариантов:
1) Код, в принципе, не имеет смысла переводить в многопоточный. Типичный пример: простая одноразовая обработка потока (файла).
2) Код имеет выигрыш в многопоточном варианте, но при определённых условиях. Условно: для файла в 1Гб выигрыш есть, для 100Мб - нет. Или при запуске на 5 потоках выигрыш есть, а при запуске на 50 - нет.
3) Многопоточность даёт выигрыш, но способов её реализации много. И в данной реализации или не верно выбран способ реализации, или не верно создана реализация выбранного способа.

К сожалению, ответить на эти вопросы сможете только вы сами, ввиду явной недостаточности предоставленной вам публичной информации.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.02.2024, 11:27
Цитата Сообщение от belalugoci Посмотреть сообщение
я использовал значение 500
Это приводит к созданию 2к тасок в самом минимальном значении. По идеи нужно дробить string.Length / CPU_CORE_COUNT.
0
Эксперт .NET
 Аватар для Rius
13848 / 7890 / 1707
Регистрация: 25.05.2015
Сообщений: 23,958
Записей в блоге: 14
26.02.2024, 11:29
Цитата Сообщение от Wolfdp Посмотреть сообщение
По идеи нужно дробить string.Length / CPU_CORE_COUNT.
Надо Parallel.ForEach использовать. Но именно этому ТС что-то советовать абсолютно бесполезно.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.02.2024, 11:42
Цитата Сообщение от Rius Посмотреть сообщение
Надо Parallel.ForEach использовать
Мне кажется можно и через new Thread, и через Task, и ещё кучу методов разпаралеливания. Главное понять что много потоков -- дело не бесплатное, да и CPU умеет по сути только в дюжину ядер максимум.

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
Но именно этому ТС что-то советовать абсолютно бесполезно.
Не он первый, не он последний... Зелеными орками не обзывается, уже не плохо.

1
Эксперт .NET
 Аватар для Usaga
14786 / 9560 / 1366
Регистрация: 21.01.2016
Сообщений: 36,048
26.02.2024, 11:52
Цитата Сообщение от belalugoci Посмотреть сообщение
логически бессвязное утверждение.
Значит у тебя своя логика, отличная от обычной.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 12:07  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Это приводит к созданию 2к тасок в самом минимальном значении
а как же:
Цитата Сообщение от Uswer Посмотреть сообщение
Не правильно понимаете, потоков будет не больше, чем можно взять из пула потоков
Цитата Сообщение от Rius Посмотреть сообщение
Надо Parallel.ForEach использовать. Но именно этому ТС что-то советовать абсолютно бесполезно
советовать что? я сюда пришел уже используя Parallel.ForEach.
Как использовать ThreadLocal никто не написал, всё что прочитал в MSDN и разных примерах никак не поможет.

Добавлено через 42 секунды
Цитата Сообщение от Usaga Посмотреть сообщение
Значит у тебя своя логика, отличная от обычной.
или у меня обычная логика, а у тебя своя, альтернативная.

Добавлено через 3 минуты
Цитата Сообщение от Wolfdp Посмотреть сообщение
Главное понять что много потоков -- дело не бесплатное
я почти всегда пользуюсь Parallel.ForEach, но до сего момента мне нужно было только обрабатывать, без обратной связи между потоками. И там с распараллеливанием всё отлично, практически линейное масштабирование.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.02.2024, 12:21
Цитата Сообщение от belalugoci Посмотреть сообщение
а как же:
Слушайте, я вроде не Тамплиер и не подключен к Кхале. Я не читаю каждый пост, с учетом того что обсуждение ведется всего и вся. Максимум бегло просмотрю, без детального разбора.

Вы более точно указали задачу: найти самую длинную строку. Я дал пример. Вы попробовали повторить -- получили негативный результат. Я указал что возможно причина в том что разбивали на 500. Это нужно было воспринять как "окей, попробую сделать 4(!) таски, которые будут процесить свои блоки", а не искать среди постов остальных пользователей что-то, что будет противоречить моему высказыванию.

p.s. не проверял, но подозреваю что для 1кк строки разбиение на 4 потока тоже не даст сильного прироста. Современным CPU перелопатить 1млн элементов довольно плевое дело.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 13:11  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Я не читаю каждый пост
а причем тут чтение всех постов? человек делает утверждение на основании вопроса ЗАДАННОГО ВАМ с цитированием, то есть я у вас лично об этом спросил, вы на этот вопрос не ответили, ответил другой, а следующий ваш пост противоречит тому, что написал он. Поэтому я вам и цитирую его сообщение задавая вам вопрос. Если вы в принципе ничего не читаете, то не удивительно что и ответы ваши к теме могут вообще не иметь отношения.

Цитата Сообщение от Wolfdp Посмотреть сообщение
Я дал пример
Пример понятный, непонятно - зачем? Если бы мне нужно было решение указанной задачи, то я и тему бы создавал соответствующую. А тему о другом.
Конкретно ваша реализация плохая по двум параметрам из трёх. Третий мне не важен, я не работаю в команде и меня не интересует скорость разработки, а значит полезность ответа нулевая.

Цитата Сообщение от Wolfdp Посмотреть сообщение
Я указал что возможно причина в том что разбивали на 500
нет, во всяком случае не в моей реализации, в вашей LINQ может быть более тяжелый на подготовку потока и исполнения.

Цитата Сообщение от Wolfdp Посмотреть сообщение
Это нужно было воспринять как "окей, попробую сделать 4(!) таски, которые будут процесить свои блоки"
В таблице с результатами бенчмарка под названием Parallel в моей реализации используются (условно) блоки от 16 до 1 байта и как вы можете видеть даже на 900К элементов выигрыш почти в 2 раза.
Ок, спешл фо ю сделаю вариант на 225К на блок. А у себя "отпущу" размер блоков в свободное плавание (сейчас они у меня ограничены 16 байтами), там блоки могут варьироваться от 524000 до 536000000.

Цитата Сообщение от Wolfdp Посмотреть сообщение
а не искать среди постов остальных пользователей что-то, что будет противоречить моему высказыванию.
Я ничего не ищу, я читаю свою тему.

Цитата Сообщение от Wolfdp Посмотреть сообщение
p.s. не проверял, но подозреваю что для 1кк строки разбиение на 4 потока тоже не даст сильного прироста. Современным CPU перелопатить 1млн элементов довольно плевое дело.
Вы его уже наблюдаете в тестовой таблице и ваша реализация медленнее моей на 900К элементах в почти 6 раз, а на 900М элементов вообще в почти 11 раз, при том что batch у вас в 30 раз больше.

Добавлено через 8 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
1) Код, в принципе, не имеет смысла переводить в многопоточный. Типичный пример: простая одноразовая обработка потока (файла).
не согласен, всегда использую Parallel.For/ForEach на таких операциях и всегда практически линейное увеличение скорости обработки.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
3) Многопоточность даёт выигрыш, но способов её реализации много. И в данной реализации или не верно выбран способ реализации, или не верно создана реализация выбранного способа.
Я реализовал три варианта, один через Parallel.ForEach, второй через Task, третий через Task по коду Wolfdp.
ForEach работает медленно из-за lock, через Task моя реализация работает быстро, но у меня там нет LINQ, реализация Wolfdp и ОЗУ кушает больше и тормознее. Из чего можно уже сейчас сказать, что выигрыш есть и моя реализация работает. Если тут подскажут еще какой-то вариант - попробую его.
Самое быстрое решение конечно с Interlocked, но к несчастью из всего материала что я прочитал я так и не понял как можно его применить для моего кода. А при небезопасном использовании и хороших показаниях в скорости идёт 4 ошибки на 1 млн, что уже считаю недопустимым.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
26.02.2024, 13:42
Цитата Сообщение от belalugoci Посмотреть сообщение
не согласен, всегда использую Parallel.For/ForEach на таких операциях и всегда практически линейное увеличение скорости обработки.
Значит не простая обработка или вы не учитывает время загрузки файла. Например, многоразовая обработка предзагруженного файла.

Цитата Сообщение от belalugoci Посмотреть сообщение
ForEach работает медленно из-за lock
lock сам по себе довольно медленный, поскольку требует прокидывания во все потоки задействованных в его области данных.
Например, последовательное суммирование выполняется на уровне процессорных регистров. Но если нужна синхронизация суммы с другими потоками, то почти на 100% она будет происходить через память верхнего уровня + к этому ещё время на ожидания подтверждения локирования.
Это в десятки, если не сотни раз медленнее чем регистровое суммирование.

В вашей задаче, как я понял, вам нужен только конечный результат. Промежуточные не нужны. Верно?
В таком случае каждая задача может скидывать результат end - start в коллекцию, а по завершению всех задач - выбрать максимум из этой коллекции.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.02.2024, 14:50

Не по теме:

Мне вот интересно, почему люди которые постоянно спорят, вместо попыток более внимательно прочитать/проресечить, постоянно отписываются простынями? Причем, блин, отвечают не весь кусок, а на каждое отдельное предложение.



Добавлено через 33 минуты
Чекнул для 50_000_000 слов длиной от 10 до 30 -- однопоточный отрабатывает за 00:00:00.0000162.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string Max(int start)
{
    var n = start + batch;
    var max = 0;
    var maxIndex = 0;
    var currentIndex = 0;
    var current = 0;
    char ch;
    for (var i = start; i < n; i++)
    {
        current = 0;
        currentIndex = i;
        while (i < source.Length && (ch = source[i++]) != ' ')
            current++;
        if (max < current)
        { 
            max = current;
            maxIndex = currentIndex;
        }
    }
 
    return source.Substring(maxIndex, max);
}
Дробить на потоки тут смысла нет. Генерить файл (тут по сути нужно ГБ 20, чтобы потоки начали приносить профит) -- упремся в I/O, что тоже обесмысливает потоки.

P.S. хз чего ТС вцепился за Linq, по факту в моем изначальном примере молотил StringBuilder для каждого слова, хотя можно было чекать тупо индексы, а потом делать финальный Substring. Скорее всего у ТСа однопоточный вариант по индексам и работал, сравнивал с многопоточным StringBuilder.... Ну да ладно, как сам писал -- не первый, и не последний.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
26.02.2024, 14:50  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Значит не простая обработка
иногда что-то тривиальное, иногда что-то работающее сутками.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
или вы не учитывает время загрузки файла
оно константное, зачем его учитывать?
если вы намекаете на то, что файл грузится 100 мс, а код выполняется 10 мс, то да, такой эффект есть, но когда вы обрабатываете например 400 Гб файлов и вместо 30 минут ждёте результат 20, то лично для меня это хороший результат.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
В вашей задаче, как я понял, вам нужен только конечный результат. Промежуточные не нужны. Верно?
и да и нет. на данный момент аналитика так устроена, то следующие потоки опираются на результаты предыдущих потоков. Можно сделать например как сделал Wolfdp, но это вариант, который я сразу же обозначил как неприемлемый именно из-за огромного использования ОЗУ, ведь фактически поиск потребует максимум 2N памяти.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
В таком случае каждая задача может скидывать результат end - start в коллекцию, а по завершению всех задач - выбрать максимум из этой коллекции.
Это модифицированный вариант Wolfdp, просто вместо списка строк будет список кортежей или int. Ну и задача упрощена, для работы требуется контроль 3-х переменных и там не обойтись Inc/Dec/Exchange

Цитата Сообщение от Wolfdp Посмотреть сообщение
Мне вот интересно, почему люди которые постоянно спорят
Значит написанное вами как минимум не однозначно.

Цитата Сообщение от Wolfdp Посмотреть сообщение
вместо попыток более внимательно прочитать/проресечить
Вы свечку держите? Или за меня решаете что мне и когда делать? Придется время ресёчить - буду ресёчить.
И одного внимательно прочтения недостаточно, еще нужно уметь понять то, что читаешь. А я многое совсем не понимаю.

Цитата Сообщение от Wolfdp Посмотреть сообщение
постоянно отписываются простынями?
Для вашего удобства и понимания.

Цитата Сообщение от Wolfdp Посмотреть сообщение
Причем, блин, отвечают не весь кусок, а на каждое отдельное предложение
Я отвечаю на затронутые темы. Если вы написали информации на портянку, то каким образом я могу дать ответ в два слова?
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
26.02.2024, 14:59
Цитата Сообщение от belalugoci Посмотреть сообщение
оно константное, зачем его учитывать?
Оно не константное, оно непредсказуемое и зависит от особенностей операционной системы, объема памяти, объёма файла, типа накопителя и много чего ещё.

Ну т.е. при следующем сценарии:
1. Запустить процесс.
2. Загрузить 20ГБ в память с SSD.
3. Обработать.
4. Полностью завершить процесс.
5. Снова запустить тот же процесс.
6. Загрузить те же 20ГБ в память с SSD.

В пункте 6 время загрузки данных из файла в память может быть и как в п.2, и в десятки-сотни раз быстрее.

И если это не учитывать при исследовании скорости алгоритмов, обрабатывающих большие объёмы данных (т.е. не производить предварительную полную загрузку файла/частей в память или не исключать это время из отчётов), то результаты могут сильно разниться даже между двумя запусками одного и того же алгоритма в полностью идентичных условиях.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2024, 14:59

Подскажите как правильно поступить
Доброго всем времени суток. Решил я обновить немного комп, но очень ограничен в средствах, потому видеокарты пока не будет, но в ближайший...

как правильно поступить с COOKIE
Привет всем делаю рефиральную систему. Хочу сделать что бы добавив к любому адресу сайта get параметр в куки записывался id реферала. у...

как правильно поступить с hover
Привет всем. сейчас делаю меню и у меня возник вопросик. у меня вертикальное выпадающее меню на чистом css. Так вот у каждого пункта есть...

Отображение левого меню, как правильно поступить?
На сайте есть левое меню и есть контент. В данный момент подменю выпадающее. Надо сделать так, чтобы оно было справа от основного меню....

Как правильно нужно поступить в текущей ситуации?
Добрый день. Есть задача сделать &quot;журнал&quot; в excel с группами который выглядел бы как на диаграмме 1. Соответственно я захотел хоть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru