|
Многопоточность?
|
|||
---|---|---|---|
#18+
Здравствуйте Имеется сторонняя длл. В ней есть одна нужная функция. На большом количестве итераций она оооочень долго работает. Хотелось бы ускорить, ее раз так в 50. Для этого я разбивал выполнение на потоки (Thread thread1 = new Thread....) ну и каждый запускался. В итоге суммарное время все равно не менялось. Что 10 потоков по 100 итераций, что один поток на 1000 итераций. Отсюда возникает вопрос, это сама сторонняя библиотека не позволяет работать в многопоточном режиме? Или что-то еще... Еще момент, что на 6ти ядерном сервере работает даже медленнее чем на 2х (хотя на 2х яд win7 а на 6-ти- win serv 2008). То есть не использует ресурсы. (загружает всего 12-13% = 1 ядро из 6). То есть мб еще и сама винда не может его распараллелить на ресурсы компа? (хотя в этом вопросе я не разбираюсь. Это всего лишь предположение) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 14:22 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Sky Dragon, для начала нити к ядрам привязать(affinity задать) и смотреть на загрузку ЦПУ. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 14:52 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Sky Dragon, а как ты её цепляешь? для каждого потока единый вызов? Код: c# 1. 2.
если так попробывать. какждому потоку свою dll подргружать? может будет толк? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 15:10 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
ИзопропилSky Dragon, для начала нити к ядрам привязать(affinity задать) и смотреть на загрузку ЦПУ. а если потоки из пула использовать, они будут шедулиться на каждый процессор/ядро? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 16:49 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Что за библиотека то? есть ли доступ к исходникам? Есть еще вариант запускать несколько процессов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 16:54 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Изопропил, Интересная штука была без привязки к ядру. Если был один поток, то грузилось одно ядро. Если потоков несколько, то грузились все, но по очереди. То есть в момент времени выполнялся только один поток. И общая загрузка ЦП так же не менялась. Протестить ручную привязку к ядрам пока не получается (для работы длл требуется подключенная железка. И что-то она не прокидывается на виртуалку, где много ядер) beg-in-er, Библиотека дотнетовская. Подключаю через референс ) Arm79, Кода нет. Библиотека китайская ) Попробовал на нескольких процессах. Работают. Грузят оба ядра на 100%. Но тут уже пошла нехватка ресурсов и поэтому время каждого процесса чуть-чуть увеличилось относительна этого же процесса, когда он один. Забавно... если инициализировать класс этой библиотеки в отдельных потоках, то он валится с эксепшеном. А если в разных процессах, то нормально... Пытался как-то делать через WCF сервис, но он тоже видимо создавал отдельные потоки для каждого запроса и опять падало же с эксепшеном при инициализации класса... Roslyn, С пулами не работал. надо почитать ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 08:06 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Изопропил, сканер отпечатков пальцев. Короче... прочитал мануал. Там сказано, что эта функция сама по себе такая медленная... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 10:34 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
в функции могут критические секции стоять ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 10:44 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Pallarisв функции могут критические секции стоять +1 Задачу похожего типа решали когда-то. Был диспетчер процессов, который получал информацию. Он запускал нужное количество дочерних процессов и каждому в асинхронном режиме передавал инфу для обработки. Полученный результат от дочернего процесса через диспетчер доставлялся клиенту. Диспетчер - http + tcp, взаимодействие с дочерними процессами через pipe (всё - wcf-сервисы) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 11:45 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
а посмотрите через рефлектор? Может там просто lock стоит :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 12:28 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
Sky Dragonсканер отпечатков пальцев. Если функция обращается к сканеру и что-то с него считывает, например, через COM-порт, то распареллелить это никак не получится ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 13:41 |
|
Многопоточность?
|
|||
---|---|---|---|
#18+
PallarisSky Dragonсканер отпечатков пальцев. Если функция обращается к сканеру и что-то с него считывает, например, через COM-порт, то распареллелить это никак не получится Верно, но можно расспаралелить инстанс, который получается с либы ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 19:17 |
|
|
start [/forum/topic.php?fid=20&msg=38349597&tid=1404274]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 476ms |
0 / 0 |