В распараллеленном коде операции с динамической памятью становятся особенно узким местом, если не применять специальных техник, типа отдельных пулов памяти на каждый поток.
Предлагаю внести stringstream stream внутрь тела цикла в функции _WorkerThread.
Потому что оператор << добавляет данные в поток.
Так что в конце там оказывается очень динная строчка.
Кроме того, delete [] хорош к месту, в функции _WorkerThread должен быть простой delete.
Ни одной проверки на то, что socket_write записал все, что его просили записать. Он и в блокирующем-то режиме судя по документации может записать не всё, а в неблокирующем тем более.
«не обмани» — это что-то невенькое. есть «не лжесвидетельствуй».
«возлюби ближнего своего как самого себя» — вот такой заповеди нет, но это говорится во многих местах.
«не сотвори себе кумира» — а вот такая заповедь как раз есть.
Проблема-то никуда не денется, завершение процесса всё равно придётся отслеживать и убивать «заработавшихся».
По теме — однажды занимался похожим при разработке скриптов автоматизированного тестирования. С тех пор жалею, что ulimit не способен ограничить реальное время работы приложения, только процессорное.
А я начал с gstreamer потому что всё равно было с чего начать, а он почти полностью присутствует в стандартной прошивке. Специально я ставил только gstreamer0.10-tools, чтобы получить gst-launch.
Резюме: велосипед не изобретен, просто собран из имеющихся деталей (:
Показатель уверенности — как ни странно, VIRT в top'е, или private_dirty+swap в /proc//smaps
В итоге CXX=gfilt и всё работает.
Потому что оператор << добавляет данные в поток.
Так что в конце там оказывается очень динная строчка.
Кроме того, delete [] хорош к месту, в функции _WorkerThread должен быть простой delete.
Может быть на PHP так принято?
Скорее происходит, но не сразу. А сразу возвращается ошибка, потому что операция потенциально блокирующая.
Ни одной проверки на то, что socket_write записал все, что его просили записать. Он и в блокирующем-то режиме судя по документации может записать не всё, а в неблокирующем тем более.
Опять же, никакой проверки длины. Наверно это будет работать для мелких ответов. Но по чистой случайности.
Воспользуйтесь socket_select, чтобы отсеять большую часть «всяких» случаев.
Klocwork.
«возлюби ближнего своего как самого себя» — вот такой заповеди нет, но это говорится во многих местах.
«не сотвори себе кумира» — а вот такая заповедь как раз есть.
Ссылочки.
Правда MIMO подразумевает работу на нескольких каналах одновременно.
По теме — однажды занимался похожим при разработке скриптов автоматизированного тестирования. С тех пор жалею, что ulimit не способен ограничить реальное время работы приложения, только процессорное.
А я начал с gstreamer потому что всё равно было с чего начать, а он почти полностью присутствует в стандартной прошивке. Специально я ставил только gstreamer0.10-tools, чтобы получить gst-launch.
Резюме: велосипед не изобретен, просто собран из имеющихся деталей (: