Re[5]: Тестовое задание ...
От: Evgeny.Panasyuk Россия  
Дата: 17.06.15 08:55
Оценка:
Здравствуйте, antropolog, Вы писали:

A>В то время как в моём случае:

A>отдельная lock-free очередь на каждый тред
A>NextTask/AddTask работает с конкретной очередью, мьютекс не нужен, поиск в очереди не нужен, добавление/удаление таски — одна CAS операция. Единственный недостаток — теоретическая разбалансировка, я повторюсь — теоретическая, например при малом количестве клиентов, и если у них внезапно совпал id % threadnum (ну или hash(id) % threadnum ). В реальном мире такая разбалансировка практически не встречается, а если встречается то на малом количестве "долгих клиентов" и при невезучем случае.
A>Иными словами — мой алгоритм оптимален для многоих клиентов с мелкими тасками ( т.к. минимальный shared state и отсутствие блокировок).

Твой алгоритм не соответствует условию ТЗ:

S>Не должно быть "повисших" клиентов, даже если клиентов больше, чем потоков.
S>Т.е. поток должен обрабатывать разных клиентов по-очереди, а не одного до завершения всех его задач.

Возьми простой случай одного рабочего потока — никакого "разных клиентов по-очереди" у тебя нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.