|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivAlekseySQLМне не нравится C++ Multi-threading из- за большого количества кода, за которым теряется суть программы. А все же, что ты имел в виду конкретно? Стандартную библиотеку С++ :) Не хватает оберток над потоками, чтобы из-за более высокой абстракции количество кода уменьшилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 23:06 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 23:16 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivmaytonP.S. Посмотри Boost.Thread. Возможно с некоторой натяжкой сойдет за то что тебе нужно. не нужен уже Boost.Thread, он уже вошел в стандарт. конечно, это если у вас есть с++ компилятор. VC уже поддерживает. Ну... классно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 01:03 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
MasterZivНу, это -- вообще далеко не самая простая и очевидная вещь, и на самом деле не самая нужная для конечного разработчика. В принципе, её не обязательно понимать глубоко, или даже вообще понимать. Не сказал бы так... Если от тебя требуется выжать максимум производительности, как от low latency programmer'а, то часто приходится прибегать к "программированию без блокировок", напрасно не тратя время на бессмысленные переключения контекста (что является убийцей высокой производительности). Именно тогда-то атомики и решают. Учитывая, что они включены в стандартную библиотеку, и не требуется больше никаких зависимостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 13:45 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
NekZMasterZivНу, это -- вообще далеко не самая простая и очевидная вещь, и на самом деле не самая нужная для конечного разработчика. В принципе, её не обязательно понимать глубоко, или даже вообще понимать. Не сказал бы так... Если от тебя требуется выжать максимум производительности, как от low latency programmer'а, то часто приходится прибегать к "программированию без блокировок", напрасно не тратя время на бессмысленные переключения контекста (что является убийцей высокой производительности). Именно тогда-то атомики и решают. Учитывая, что они включены в стандартную библиотеку, и не требуется больше никаких зависимостей. Ерунда. 90% производительности не в этом закладывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 15:49 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВася УткинНапример, есть 4 потока и ждешь пока освободиться любой из них успешного или аварийного, и так 20 раз. Опрос состояния всех потоков в цикле. Прэлееестно. Это даже не прыжки в ширину, это бег на месте с препятствиями. Извольте показать свой вариант, как бы сделали это вы, или как бы в идеале это должно было быть реализовано внутри C++ или OS ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:02 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Я так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:11 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Я так понимаю Dimitry Sibiryakov знает какую-то намного более простую и быструю реализацию подобного WaitForMultipleObjects(), но написать её не может :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:44 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Да, именно о нём. И я более чем уверен, что внутри его реализации нет цикла, а есть занесение текущего потока в список ожидания для всех alertable objеcts из массива и спокойный сон до вызова resume при изменении состояния любого из этих объектов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 16:52 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovDima TЯ так понимаю речь о WaitForMultipleObjects() если речь про виндовс. Подсунул ей массив хэндлов потоков и жди. Да, именно о нём. И я более чем уверен, что внутри его реализации нет цикла, а есть занесение текущего потока в список ожидания для всех alertable objеcts из массива и спокойный сон до вызова resume при изменении состояния любого из этих объектов. Так и есть, т.к. это средства ОС. Виндовс просто перестает выделять потоку кванты времени пока хотя бы один из хэндлов не перейдет в сигнальное состояние, т.е. завершится поток. КПД 100%, пробуждение мгновенное. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 19:11 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася Уткин Код: plaintext 1.
А потом ищем почему прога тупит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 19:14 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткин Код: plaintext 1.
А потом ищем почему прога тупит. Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:06 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima Tпропущено... А потом ищем почему прога тупит. Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Запусти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:22 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткинпропущено... Так так так, интересно, почему? Подскажи, а то тут прога тупит с ожиданием 1мс между проверкой статусов потоков на ОС с квантом времени >=1мс. Какие книжки почитать? Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:47 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинСпасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? гарантий нет ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 20:50 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima Tпропущено... Потому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет. Да и потоков за 1 мс может пачка отработать. Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? Гарантий нет, виндовс не реалтайм ОС, но скорее всего время будет единицы нано секунд. Принцип простой: поток завершился, ОС смотрит кто ожидает его завершения (как правило это один поток) и дает квант времени ожидающему. Примитивно описал, как оно реально происходит MS не разглашает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:03 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TВася Уткинпропущено... Спасибо, а поток ожидающий (уснувший) на стандартном виндовом WaitForMultipleObjects() гарантированно не больше чем за 1мс проснется после того как один из ожидаемых потоков завершится? Гарантий нет, виндовс не реалтайм ОС, но скорее всего время будет единицы нано секунд. Принцип простой: поток завершился, ОС смотрит кто ожидает его завершения (как правило это один поток) и дает квант времени ожидающему. Примитивно описал, как оно реально происходит MS не разглашает. А если все ядра заняты? Т.е. переключение контекста занимает единицы нано-секунд? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:08 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Математика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:13 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TМатематика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. Т.е. т.к. за 1мс процессор совершит 3 млн операций, то если все ядра заняты, то произойдет переключение контекста на поток ожидающий WaitForMultipleObjects() за единицы наносекунд? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 21:29 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Вася УткинDima TМатематика простая: 3 ГГц = 3 млрд. операций, т.е. за 1 мс будет 3 млн. операций. Вот и думай что можно сделать за 3 млн. операций. Т.е. т.к. за 1мс процессор совершит 3 млн операций, то если все ядра заняты, то произойдет переключение контекста на поток ожидающий WaitForMultipleObjects() за единицы наносекунд? Во первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. Переключение контекста тоже не такое уж и сложное дело, там восстановление состояния регистров проца происходит. Сколько точно оно занимает - не знаю, 3 операций, 30 или 300. Возвращаясь к цифрам 1 нс это 3 операции проца. Пусть я ошибаюсь и это сотни наносекунд, все равно это в 1000+ раз меньше чем 1 мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 09:19 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Придумал как грубо замерить переключения контекста Код: plaintext 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.
У меня 27 наносекунд получилось. Правда в тесте еще мутекс переключается, поэтому само переключение контекста еще быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:37 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Не то померил, там без переключения один и тот же поток мьютекс захватывает многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 11:54 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TПотому что квант 10-20 мс, от того что ты 1 мс попросил это не факт что ОС ровно через 1мс тебе управление вернет. Если не загружена - вернет . Dima TВо первых ядра не все заняты, как минимум одно освободилось , т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:42 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Из контекста слова не вырывай. Если частично цитируешь, то бери абзац целиком. Dima TВо первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 13:54 |
|
Какой инструмент многопоточности используете?
|
|||
---|---|---|---|
#18+
Dima TТак и есть, т.к. это средства ОС. Виндовс просто перестает выделять потоку кванты времени пока хотя бы один из хэндлов не перейдет в сигнальное состояние, т.е. завершится поток. КПД 100%, пробуждение мгновенное. Dima TВо первых ядра не все заняты, как минимум одно освободилось, т.к. ждали завершение потока. Т.е. один завершился, ожидающий его запустился. А может не запустился, а только встал в очередь на выполнение. ХЗ как оно в реале происходит когда одновременно работает потоков больше чем ядер, МС это не описывает. Т.е. обычный виндовый WaitForMultipleObjects() вообще не гарантирует, что поток его ожидающий продолжит выполнение через 1нс или 1мс или даже 1 секунду после завершения ожидаемого потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2017, 14:11 |
|
|
start [/forum/topic.php?fid=57&msg=39397547&tid=2017683]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 424ms |
0 / 0 |