multithreading

Ускоряем многопоточную программу в 150 раз за три простых шага

Во вчерашней истории я, не задумываясь, предложил два способа решения проблемы congestion у Qt signal/slot в многопоточном случае: выдавать результат работы потока пачками и/или вообще выдавать его другим способом (через неблокирующую очередь).

Вчера вечером я проверил первый способ (сегодня задокументировал-нарисовал графики) и вот что у меня получилось:

Исходный псевдокод собственно обработчика выглядит так:

while(job = nextJob()){ result = processJob(job); emit processed(result); }

Давайте накопим результаты в пачку и выдадим эту пачку принимающей стороне:

while(job = nextJob()){...

Закон Амдала против 'interrupt rate'

Давно не писал о программировании, а тут вдруг повод появился.

Допустим, мы хотим на Qt в много потоков что-то фигачить. Ну, к примеру, читать метаданные файлов (или метаданные RAW-снимков из RAW-файлов). Понятно, что в реальной жизни это все упирается в диск, но если все уже было прочитано и закэшировано, то нет.

В реальной жизни прекрасно работает вот такой вот паттерн: запустим N threads и в каждой из них будем делать как-то так:

while(job = nextJob()){ result =...

Subscribe to multithreading