|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRosэтот менеджер скорее всего станет узким местом Сомневаюсь. Менять состояния пачки из сотен эвентов это тоже не быстро, а тут у тебя один эвент на обработчика и немного простейших операций с массивами чисел. Главное повысить приоритет потоку с менеджером чтобы обработчики его не вытесняли. ViPRosхотел как то перевести на Акку, н не получилось концептуально (в мозгах) ИМХО задача не подходит для Акки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 13:48 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Dima T, ну, менеджер этот в мозгах уже лет 20 сидит, но он сцуко один в один повторяет структуру предприятия а в структуре есть и мобильные ресурсы (активные и пассивные) - транспорт, многостаночники, наладчики даже стационарные непросты - хорошо когда рабочее место содержит стационарный станок, набор инструментов, приспособлений, прикрепленного набора рабочих, а есть просто пустое место, где можно собраться и поработать вместе мобильным и .д. очень сложная структура и объекты все со сложным поведением при этом!!! - сама критическая секция (запланировать единицу работы) работает так быстро, что телодвижения с блокировкой этих ресурсов отнимают офигенное количество времени когда мощности хорошо сбалансированы под работы не особо большая разница во времени, что в один поток, что в 100 потому остерегаюсь создавать эти менеджеры - пытаюсь обойтись примитивами но когда нить для души попробую полностью симулировать ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 14:16 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
А так все это один в один повторяет механизм эскалации блокировок МССКЛ :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 14:17 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
сейчас вообще то у меня самая серьезная проблема - запись сгенерированной информации в СУБД на ноуте за минуту генерируется 1000 000 процессов (~ 10 000 000 записей) а запись отнимает 5-7 минут (с учетом всех распараллеливаний, симплов, балков, 610 и т.д фигни) куда бы архитектурно эту инфу сбагрить бл* ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 14:23 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
а в реале надо 50 - 70 000 000 процессов и хорошо бы не больше тех 1-5 минут ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 14:24 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRosпри этом!!! - сама критическая секция (запланировать единицу работы) работает так быстро, что телодвижения с блокировкой этих ресурсов отнимают офигенное количество времени когда мощности хорошо сбалансированы под работы не особо большая разница во времени, что в один поток, что в 100 Код надо смотреть, так сложно что-то понять. ViPRosпотому остерегаюсь создавать эти менеджеры - пытаюсь обойтись примитивами но когда нить для души попробую полностью симулировать Если тебе надо WaitAll() то однозначно уходи хотя бы на Event`ы, т.к. самодельный WaitAll() на мониторах - это извращение. ИМХО мой вариант с "кучками" 21539166 может заработать и переделка небольшая. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 14:59 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Dima T, Ну, я ж согласился что надо блоками ивентов управлять Я почему то думал, что монитор что то легковесное (в принципе везде так и написано, а исходников нет что бы посмотреть) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:23 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Код (создание процесса - очень большой), а так начало Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
-----------блабла и конец Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:27 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRosсейчас вообще то у меня самая серьезная проблема - запись сгенерированной информации в СУБД у тебя? вообще-т 99% узких мест, это IO операции. если нет желания/возможности масштабирования операций, то в сторону акка нет смысла. думал о реактивном подходе? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:31 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRos, если бы ты работал с асинхронным IO, то Monitor тут не получится использовать ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:34 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
hVosttесли нет желания/возможности масштабирования операций, то в сторону акка нет смысла. думал о реактивном подходе? ну, акка просто не подходит, неохота вспоминать почему все эти rx тоже под наблюдением пока что лучше всего TPL DataFlow, но для того что бы перейти надо кучу вещей переписать - создать конвеер ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:42 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRos Код: c# 1.
Почему не использовать потокобезопасные коллекции? Так блокировать коллекции не по феншую, да и не блокирует доступ к коллекции. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:45 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRosну, акка просто не подходит, неохота вспоминать почему Да тут и нечего вспоминать, весь смысл акторов в масштабировании, кто бы там чего не говорил. В рамках одного процесса акторы -- оверхед без видимого профита. ViPRosпока что лучше всего TPL DataFlow, но для того что бы перейти надо кучу вещей переписать - создать конвеер Неблокирующий конвеер -- наверное лучшее, что можно придумать, согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:47 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
У тебя захват блокировок внутри блокировки, т.е. чтобы начать захватывать ресурсы надо захватить algroup и monLockStru. Это гарантирует что все задачи последовательно будут выполнятся, т.к. пока хоть одна задача висит на ожидании какого-нибудь ресурса, то другие потоки висят на lock (algroup) Как минимум надо вынести этот цикл за lock (algroup) Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:49 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
hVosttViPRos, если бы ты работал с асинхронным IO, то Monitor тут не получится использовать IO асинхронная (в таких же тасках, без begin/end) Монитор в принципе плохой, его самого надо монитором закрывать, а не то стартуют процессы - клоны а чем асинхронность записи мешает монитору не знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:51 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRos Код: c# 1. 2. 3. 4.
if надо либо ещё раз выполнять после входа в критическую секцию, или выполнять внутри, иначе это небезопасно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:52 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Dima T Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
У тебя захват блокировок внутри блокировки, т.е. чтобы начать захватывать ресурсы надо захватить algroup и monLockStru. Это гарантирует что все задачи последовательно будут выполнятся, т.к. пока хоть одна задача висит на ожидании какого-нибудь ресурса, то другие потоки висят на lock (algroup) Как минимум надо вынести этот цикл за lock (algroup) Код: c# 1.
Этих algroup много - lock (algroup) пропускает неоднотипные процессы а если не сделать lock (monLockStru) то все однотипные процессы ломанутся одновременно и будет дедлок ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:54 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Код: c# 1.
так делать тоже нельзя, т.к. ты заранее блокируешь ресурсы. Например тебе надо ресурсы 1,3,5. В этом цикле ты заблокировал 1 и 3, а 5 оказался занят и ты повис в ожидании, но при этом 1 и 3 тобой заблокированы, но ты ими не пользуешься, т.к. ждешь 5. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:54 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
это такое двойное сито перед блокировкой ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:54 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
Dima T Код: c# 1.
так делать тоже нельзя, т.к. ты заранее блокируешь ресурсы. Например тебе надо ресурсы 1,3,5. В этом цикле ты заблокировал 1 и 3, а 5 оказался занят и ты повис в ожидании, но при этом 1 и 3 тобой заблокированы, но ты ими не пользуешься, т.к. ждешь 5. именно для этого и блокировка lock (monLockStru) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:55 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
ViPRosМонитор в принципе плохой, его самого надо монитором закрывать, а не то стартуют процессы - клоны а чем асинхронность записи мешает монитору не знаю тем, что код, находящийся после await, может быть выполнен в другом потоке, соответственно, блокировка на поток может быть проигнорирована, что приведёт к дедлоку. т.е. надо использовать семафоры. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:55 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
hVosttViPRosМонитор в принципе плохой, его самого надо монитором закрывать, а не то стартуют процессы - клоны а чем асинхронность записи мешает монитору не знаю тем, что код, находящийся после await, может быть выполнен в другом потоке, соответственно, блокировка на поток может быть проигнорирована, что приведёт к дедлоку. т.е. надо использовать семафоры. ну можно указать контекст если надо ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:55 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
hVosttViPRos Код: c# 1. 2. 3. 4.
if надо либо ещё раз выполнять после входа в критическую секцию, или выполнять внутри, иначе это небезопасно :) это поле статик - задается при конфигурации ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:57 |
|
AutoResetEvent vs Monitor
|
|||
---|---|---|---|
#18+
hVosttViPRos Код: c# 1.
Почему не использовать потокобезопасные коллекции? Так блокировать коллекции не по феншую, да и не блокирует доступ к коллекции. +1 Тогда и сабж монитор не понадобится) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 15:58 |
|
|
start [/forum/topic.php?fid=20&msg=39668822&tid=1399306]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 434ms |
0 / 0 |