Здравствуйте, kiamor, Вы писали:
K>Здравствуйте, naje.
N>>Есть какие-то идеи?
K>Идеи есть
поставь маленькую паузу в каждом
K>потоке (чувствую, они у тебя циклически работают
).
K>Посмотришь на результат. (Вместо паузы можно также
K>sched_yield вызвать).
А что значит циклически? Я заметил что они почему-то переключатся начинают как-то неправельно, т.б. слишком часто и в топе после того как всё отработалось этот процес ещё долго висит, я так понимаю это шедулер продолжает что-то делать. Один запрос выполняется в юзерспейсе где-то сотую секунды, полностью запрос с учётом запросов к базе где-то 3 десятые секунды, с учётом того что в юзерспейсе процесс выполняется мало получается что если запустить 10 потоков то 10 запросов будет выполнятся тоже приблизительно 3 десятые секунды, и это на практике работает, и для 20 и 30 потоков, т.б. 30 запросов за 3 десятые секунды, но потом что-то происходит, и какая-то след. пачка, выполняется медленнее чем если бы всё это обслуживал один поток (на один запрос бывает до секунды на 10 до 10 секунд), единственная синхронизация между потоками это pthread_cond.. с мьютексом, для обработки очереди запросов, больше не нужно. Если ставить sched_yield, то где? Там где ставятся задания в очередь или там где забираются?