Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.21.5] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Славян, ну это уже следующий этап оптимизации. Тем более, что конкретно в этом случае выигрыш вряд ли будет.
Надо сначала сделать так, чтобы было максимально понятно и легко исправляемо, если где-то выявится косяк. Прогнать кучу разных тестов. |
Сообщ.
#17
,
|
|
|
а не проще в отдельную процедуру распределение блоков вынести? пусть потоки запрашивают у неё номер блока, а не отбирают друг у друга.
|
Сообщ.
#18
,
|
|
|
villain, а чем это проще? Каким образом эта процедура будет работать?
Ведь она же тоже должна поддерживать параллельное к ней обращение. И тогда чем это лучше того, что есть (в чём принципиальное отличие её работы)? Я подумаю на эту тему, но пока я вижу лишь дополнительные расходы на call/ret и всё. |
Сообщ.
#19
,
|
|
|
Цитата Jin X @ Потоки, в свою очередь, инициализируют цикл по определённым правилам (см. ниже вопросы) и вызывают на каждом цикле процедуру цикла (ProcAddr), передавая ей номер цикла и порядковый номер потока вот здесь, не отдавать власть потокам, а оставить в процедуре инициализации, и от неё потоки будут получать номер блока, один, а не список. всё равно на каждом цикле поток обращается к процедуре, передать обратно пару байт - затраты ноль |
Сообщ.
#20
,
|
|
|
Цитата villain @ "Вот здесь" не получится, т.к. процедура инициализации запускается один раз для всех for'ов и просто создаёт потоки, ей не передаётся начальное и конечное значение. А если говорить про процедуру запуска for'а, то как этот поток будет передавать данные другим (рабочим) потокам?вот здесь, не отдавать власть потокам, а оставить в процедуре инициализации, и от неё потоки будут получать номер блока, один, а не список. всё равно на каждом цикле поток обращается к процедуре, передать обратно пару байт - затраты ноль Я понимаю, что каждый поток будет получать 1 номер, но каким образом он будет этот номер получать, технически? Если поток будет вызывать какую-то процедуру (и тут нет понятий "процедура потока 1", "процедура потока 2" - процедура запускается в том потоке, из которого она вызывается), то это будет один и тот же код для всех потоков. И брать следующий номер он будет из одного и того же счётчика. И вызвать её могут одновременно все потоки разом, а значит тут либо lock'и делать, либо какие-то ухищрения типа тех, что я описывал выше. Тут одно из двух: 1. Либо я не понимаю, что ты хочешь мне донести. 2. Либо ты что-то не понимаешь. Так что объясни подробнее как ты это видишь |
Сообщ.
#21
,
|
|
|
ага, я понял, где я не понял
|