|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Есть некоторая длл, в ней функция (если важно - писаная на С++). Функция либо возвращает результат, либо висит по таймауту. В одном из обсуждений я выяснил, что т.к. таскам совсем не известно что внутри ф-ции творится, они не могут это оптимизировать, а честно ждут когда выйдет таймаут. Но такое положение вещей меня совсем не устраивает. Если (условно) результат/таймаут 50/50 и таймаут в 10 секунд, то на выборке в миллион получается около трех часов бессмысленного ожидания. Но по опыту я знаю, что если ф-ция не вернула результат в первую секунду, то маловероятно что вообще вернет (хотя может, так что "срубать" таймаут нельзя). Хотелось бы по этому критерию плодить потоки дальше. Есть ли у тасков какой-то такой механизм управления. Или может на голых потоках что-то такое придумали? PS. про ThreadPool.SetMinThreads я знаю, вот только не представляю как замерить время выполнения таска, "зависшего" в ожидании возврата функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 22:37 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql, ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 01:15 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Где-то в степи, на картинке сам МСУ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 05:16 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql Есть некоторая длл, в ней функция (если важно - писаная на С++). Функция либо возвращает результат, либо висит по таймауту. В одном из обсуждений я выяснил, что т.к. таскам совсем не известно что внутри ф-ции творится, они не могут это оптимизировать, а честно ждут когда выйдет таймаут. Функцию можно запускать параллельно в нескольких потоках? Если можно, то так и делай. Зависла - пусть висит до завершения. Тупо сгенери свой миллион тасков, а они сами разберутся как выполняться. iskatelsql Или может на голых потоках что-то такое придумали? На голых потоках можно извратиться, но скорее всего поимеешь утечку памяти. Вызываешь в потоке свою функцию и в другом ждешь секунду, по истечении если первый не закончил, то убиваешь его. Но, как уже сказал, если функция выделила себе память - она ее не освободит. Освобождение произойдет по завершению твоего процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 09:33 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Я, кажется, понял, что за проблему пытается решить автор. Но, надо сказать, если эта ф-ия блокирует вызывающий поток, то все грустно и сделать тут ничего нельзя. Потому что если станешь плодить потоки руками, то у тебя система быстро встанет колом, а если пользоваться пулом потоков, то число параллельных вызовов будет всегда ограничено размерами пула сколько ты задач не создавай. Можно разве что поставить большую ферму серверов и распараллелить вызовы на них :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 10:43 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
да имхо обыкновенная квота на поток, выдаешь временную квоту, если поток не справился с работой за эту квоту, (1 сек) поток грохается и идем дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 10:54 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Где-то в степи да имхо обыкновенная квота на поток, выдаешь временную квоту, если поток не справился с работой за эту квоту, (1 сек) поток грохается и идем дальше. Только память некому освобождать. У него DLL на С++ написанная. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 11:33 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Dima T, вам поток надо освободить для следующего джоба, а функция сама сдохноет по таймауту, ну засрем память да бог с ней ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 12:30 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
у CancellationToken'а есть свой Timeout ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 13:43 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
CancellationTokenSource ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 14:25 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
Ребят, ребят... Поезд не туда пошел. Грохать поток эт не проблема. Эт я и сам справлюсь. Вопрос в том что таймаут должен отработать, поток грохать нельзя. Но в 90% случаев он ничего делать не будет, так что нужно б и другие потоки в это время насоздавать. fkthat Я, кажется, понял, что за проблему пытается решить автор. Но, надо сказать, если эта ф-ия блокирует вызывающий поток, то все грустно и сделать тут ничего нельзя. Потому что если станешь плодить потоки руками, то у тебя система быстро встанет колом, а если пользоваться пулом потоков, то число параллельных вызовов будет всегда ограничено размерами пула сколько ты задач не создавай. Можно разве что поставить большую ферму серверов и распараллелить вызовы на них :)) Да, вот это все правильно!. Но как-то грустно что сделать ничего нельзя... точнее даже не верится в это. В принципе, если бы была возможность измерить время работы таска, то можно руками увеличивать пул через секунду и уменьшать при выходе таска. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 20:47 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql, TaskCompletionSource и пилите своё неблокирующее асинхронное ожидание. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 20:56 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql Но как-то грустно что сделать ничего нельзя... точнее даже не верится в это. В принципе, если бы была возможность измерить время работы таска, то можно руками увеличивать пул через секунду и уменьшать при выходе таска. Причина грусти непонятно. Сделать можно что угодно, главное чтобы вы чётко понимали какую проблему решаете, есть ли вообще эта проблема, или просто себе чего-то надумали, или это реальная проблема, с которой вы столкнулись, или хотя бы она воспроизводится на синтетических тестах. И, самое главное. Допустим вы как-то решили проблему. Вернее, думаете (и искренне в это верите), что решили. Как вы убедитесь? Начните с тестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 20:57 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
hVostt Начните с тестов. Спорное утверждение. 1. я могу тестировать только то до чего я догадываюсь, но спрашиваю я то, чего не знаю. 2. форум вроде как для обмена опытом, если кто-то провел подобное тестирование, то быстрее в космос полетим, если делиться результатами :) hVostt TaskCompletionSource и пилите своё неблокирующее асинхронное ожидание. Звучит красиво, но будет оно именно так работать, или те же яйца, только в профиль, встанет ожидать и займет место в пуле? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:14 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql Спорное утверждение. 1. я могу тестировать только то до чего я догадываюсь, но спрашиваю я то, чего не знаю. 2. форум вроде как для обмена опытом, если кто-то провел подобное тестирование, то быстрее в космос полетим, если делиться результатами :) Ну так обмен опытом происходит на каких-то проверяемых ожиданиях и результатах. Если это обмен фантазиями -- к опыту это не имеет никакого отношения. Например, я вам скину модель бубна на алиэкспрессе, в который я стучу и у меня всё работает -- это похоже на ваши представления об обмене опытом? :) iskatelsql Звучит красиво, но будет оно именно так работать, или те же яйца, только в профиль, встанет ожидать и займет место в пуле? Ну давайте расчехлим, вы свой хрустальный шар, я свой. И посмотрим в него. У меня розовый пони, а у вас чего? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:17 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql встанет ожидать и займет место в пуле Как бы TCS может помочь в решении этой проблемы, опять же, если это проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:19 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
hVostt Если это обмен фантазиями -- к опыту это не имеет никакого отношения. Так этого совершенно не требуется, я задаю вопрос по принципу "все придумано до нас" только я этого не знаю. Я не прошу фантазировать или проводить за меня эксперименты - да так да, нет так нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:23 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
hVostt Как бы TCS может помочь в решении этой проблемы, опять же, если это проблема. Я так понимаю, что не поможет он ничем. Там хреновина которая просто лочит поток, что её вызвал. Байдезигн. Будь она кастомная, так, понятно, можно наворотить поверх неё и комплишены и канселейшены и хоть чорта лысого. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:33 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql Так этого совершенно не требуется, я задаю вопрос по принципу "все придумано до нас" только я этого не знаю. Я не прошу фантазировать или проводить за меня эксперименты - да так да, нет так нет. Да с этим никаких проблем :) Но как вы проверите, что решения, которые вам накидают, работает и вообще что-то решает? Как будете это делать? На голой вере? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 21:53 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
hVostt На голой вере На голой Вере я скорей с ней чем-то другим займусь. Интересная девиация - на голой бабе программировать... Но всеж очередность должна быть - сначала советы, потом проверка... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 22:26 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql, Делюсь с вами опытом. Начинайте с проверки. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 22:27 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
hVostt iskatelsql, Делюсь с вами опытом. Начинайте с проверки. Ну опять телега вперед лошади - я ж сказал, не могу проверить того чего еще не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 22:31 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql, давай Теее код, накидайТе консольку, надо говорить предметно, а не заниматься словоблудием, тащиТе сюда свой каменный цветок.. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 22:39 |
|
Как управлять тасками или потоками?
|
|||
---|---|---|---|
#18+
iskatelsql Ну опять телега вперед лошади - я ж сказал, не могу проверить того чего еще не знаю. Ну чего же тогда делать предлагаете? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 23:42 |
|
|
Start [/forum/topic.php?fid=20&fpage=4&tid=1398323]: |
0ms |
get settings: |
29ms |
get forum list: |
9ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
100ms |
get topic data: |
35ms |
get forum data: |
3ms |
get page messages: |
549ms |
get tp. blocked users: |
2ms |
others: | 192ms |
total: | 927ms |
0 / 0 |