почему cgo медленее чем нативный go.
Вводная:
Написал функцию на Си:
1) фибоначчи (рекурсивно)
2) сложение
Написал функцию на Го:
1) фибоначчи (рекурсивно)
2) сложение
Делаю между ними сравнение по бенчмаркам.
Выясняю что сложение в си в сравнении со сложением с го - работает медленее (и понятно почему - переключение рантаймов/ffi ...).
Выясняю что фибоначчи в си в сравнеии с фибоначчи в го - работает быстрее (и не понятно почему ... ).
Вопрос. Почему в примере с функцией фибоначчи - враппер cgo работает быстрее?
Подскажите пжт!
> Вопрос. Почему в примере с функцией фибоначчи - враппер cgo работает быстрее? Хотя по сути в первом и во втором случае идет вызов си кода через *.so/*.dylib
Моя единственная идея – в Go делается больше работы на входе и выходе из функции: переключение на скедулере, пролог для defer и так далее. Попробуйте сделать без рекурсии и сравнить.
А ты возьми числодробилку. И может оказаться, что с CGO работает быстрее https://github.com/RPG-18/wasmer-go-assemblyscript
Ну да, ffi cost. Видел очевидные велосипеды где это амортизируют на жирный батч.
как минимум по этому докладу можно сделать вывод, что работа с GC в GO добавляет проблем, но это не ваш кейс. https://www.youtube.com/watch?v=bdx8W_gxS3E
Обсуждают сегодня