Я работаю над программой, в которой требуется загрузить большое количество файлов JSON с разных URL-адресов.
В настоящее время моя программа создает несколько потоков, и в каждом из них она вызывает LibCurl easy_perform (), но я сталкиваюсь с проблемами, когда программа завершается с ошибкой иногда с ошибкой "двойного освобождения".Кажется, это какой-то гейзенбаг, но я смог его отловить в GDB, который подтверждает, что ошибка возникла в LibCurl (backtraced).
Хотя я хотел бы услышать предложения по моей проблеме, мой фактический вопросэто: было бы лучше, если бы я изменил структуру моего кода, чтобы использовать мультиинтерфейс LibCurl в одном потоке вместо вызова одного интерфейса в нескольких потоках?Каковы преимущества использования одного над другим?
Примечание. Под словом «лучше» я подразумеваю, что он быстрее и дешевле для моего процессора?Является ли это более надежным, поскольку мультиинтерфейс был разработан для этого?
РЕДАКТИРОВАТЬ:
Три варианта, которые я понимаю, как я понимаю, это:
1) Повторное использованиеeasy_handle в одной теме.Соединения не нужно восстанавливать, чтобы сделать это быстрее.
2) Вызовите curl_easy_perform () в каждом отдельном потоке.Все они работают параллельно, опять же, делая это быстрее.
3) Вызовите curl_multi_perform () в одном потоке.Это неблокирующе, так что я думаю, что все файлы загружаются параллельно, что делает его быстрее?
Какой из этих вариантов наиболее эффективен по времени?