Я собираюсь прочитать большой файл csv и вернуть массив структур. Итак, я решил разбить большой файл на несколько меньших файлов с 1 миллионом строк и использовать процедуры для их параллельной обработки.параллельное распределение памяти с помощью `make`?
Внутри каждого работника, я создаю массив для вставки файлов строки в:
for i := 0; i < 10 ; i++ {
go func(index int) {
lines := make([]MyStruct, 1000000)
}(i)
}
Похоже ходу процедуры ждут друг друга на этой линии. Итак, если выделение памяти для массива занимает 1 секунду, 10 одновременных процедур, выполняющих это, будут занимать 10 секунд, а не 1 секунду!
Не могли бы вы помочь мне понять, почему? Если это так, я предполагаю, что я буду выделять память перед запуском подпрограмм go и передать указатель массива каждому из них, а также индекс элемента, который им нужно начинать с чтения строк и значений настроек.
ли параметр переменной среды GOMAXPROCS? Если нет, по умолчанию Go будет использовать только одно ядро ЦП. – siritinga
@siritinga, что не улучшилось. После того, как я установил 'GOMAXPROCS', производительность не будет одинаковой при каждом прогоне. Возможно, это свидетельствует о том, что рабочие работают над разностными ядрами. Но это все еще очень медленнее, чем выделение памяти один раз. – sina
Для чего это стоит, просто добавление большого старого фрагмента по мере того, как вы идете, может работать лучше, чем вы думаете: тестирование [для другого вопроса] (http://stackoverflow.com/questions/20251900/efficient-appending-to-a- variable-length-container-of-strings-golang), миллион, добавляемый к строке '[], занимает 77 мс. – twotwotwo