Побољшајте перформансе својих Го програма користећи технику профилисања.
Профилисање је техника која се обично користи у циклусу развоја софтвера за анализу перформанси а програм, обично за поређење између програма или за идентификацију уских грла и области побољшања за а програм. Профилисање укључује мерење и анализу различитих метрика као што су коришћење меморије, коришћење ЦПУ-а, време извршења и друге статистике на нивоу система.
Профилисање има за циљ да идентификује делове програма који троше највише ресурса како би се могао оптимизовати за боље перформансе. Профилисање такође може помоћи у отклањању грешака, оптимизацији управљања меморијом и подешавању паралелности.
Профилисање у Го
У Го-у постоји много алата за профилисање. Неки популарни алати укључују Го-ов уграђени ппроф алат за профилисање и популарне пакете независних произвођача као што су Го Тоол Траце и Го-Торцх пакети.
Тхе ппроф пакет је део рунтиме пакет. Тхе ппроф пакет пружа функционалност за писање података за профилисање током извршавања у форматима који су ппроф алат за визуелизацију може да тумачи.
Ево како можете да увезете ппроф упакујте у своје Го програме:
увоз"ппроф"
Го пружа неколико команди и заставица за рад са изворним кодом. Покрените следеће оруђе команду за приступ резултатима профилисања у различитим форматима.
иди алат ппроф
Команда даје детаље о употреби ппроф команда.
ЦПУ профилисање у Го
ЦПУ профилисање мери време које програм проведе док извршава функције. ЦПУ профилисање је корисно за идентификацију делова кода који троше највише ЦПУ времена.
Тхе ппроф пакет пружа функције за прикупљање ЦПУ профила, покретање и заустављање ЦПУ профилисања и функцију за писање података профила у датотеке.
Ево како да покренете и зауставите ЦПУ профил и упишете податке у датотеку за профилисање:
увоз (
"ос"
"рунтиме/ппроф"
)фунцглавни() {
ф, ерр := ос. Креирај("цпу_профиле.проф")
ако ерр != нула {
паника(ерр)
}
одложити ф. Близу()ерр = ппроф. СтартЦПУПрофиле (ф)
ако ерр != нула {
паника(ерр)
}
одложити ппроф. СтопЦПУПрофиле()
// код за профилисање
}
Тхе главни функција креира датотеку и затвара ток датотеке помоћу а одложити изјава и Близу функција инстанце датотеке. Тхе СтартЦПУПрофиле функција покреће ЦПУ профил и уписује податке у датотеку, а СтопЦПУПрофиле затвара ток профила са а одложити изјава. Након покретања и заустављања ЦПУ профила, можете наставити са писањем кода који желите да анализирате.
Ево резултата покретања ппроф команду са датотеком профила из програма:
Руннинг тхе ппроф команда са датотеком покреће интерактивну љуску која вам омогућава да истражите податке профилисања. Можете користити команде попут топ и листа да видите функције за које је потребно највише времена да се изврше.
Профилисање меморије у Го
Профилирање меморије је техника која се користи за идентификацију цурења меморије и скупе употребе меморије у коду мерењем употребе меморије функција у коду.
Можете да покренете меморијски профил са ВритеХеапПрофиле функција. Тхе ВритеХеапПрофиле функција узима инстанцу датотеке и уписује податке профила у датотеку.
увоз (
"ос"
"рунтиме/ппроф"
)фунцглавни() {
ф, ерр := ос. Креирај("мем_профиле.проф")
ако ерр != нула {
паника(ерр)
}
одложити ф. Близу()ерр = ппроф. ВритеХеапПрофиле (ф)
ако ерр != нула {
паника(ерр)
}
// код за профилисање
}
Тхе главни функција креира датотеку за профилисање, а ВритеХеапПрофиле функција узима инстанцу датотеке као аргумент и враћа тип грешке при писању након писања у датотеку. Можете даље решите грешку у складу са вашим захтевом.
Блокирајте профилисање помоћу Го
Профилисање блокова мери време чекања програма за примитиве за синхронизацију, као што су мутекси и канали. Профилирање блокова је корисно за идентификацију делова кода који могу изазвати блокирање.
Тхе Потражити функција враћа профил са именом наведеног стринга, и Писати функција на Потражити функција уписује ппроф форматиран снимак профила у датотеку.
Ево како можете да примените блок профилисање за своје Го програме:
увоз (
"ос"
"рунтиме/ппроф"
)фунцглавни() {
ф, ерр := ос. Креирај("блоцк_профиле.проф")
ако ерр != нула {
паника(ерр)
}
одложити ф. Близу()ерр = ппроф. Потражити("блокирати").ВритеТо (ф, 0)
ако ерр != нула {
паника(ерр)
}
// код за профилисање
}
Програм креира датотеку за чување података профила блока, тражи блокове са Потражити функцију и уписује податке о профилу блока у датотеку.
Траце Профилинг Витх Го
Профилирање праћења је техника за мерење извршења програма, укључујући заказивање горутине и системске позиве. Профилирање праћења је корисно за идентификацију уских грла у перформансама и разумевање интеракција између различитих делова програма.
Тхе траг пакет пружа функције за профилисање трагова. Овај пакет је такође део рунтиме пакет.
увоз (
"ос"
"време извођења/траг"
)фунцглавни() {
ф, ерр := ос. Креирај("траг од")
ако ерр != нула {
паника(ерр)
}
одложити ф. Близу()грешка = траг. Почетак (ф)
ако ерр != нула {
паника(ерр)
}
одложити траг. Зауставити()
// код за профилисање
}
Програм креира датотеку праћења за складиштење података праћења, покреће трагач са Почетак функција која узима инстанцу датотеке и враћа тип грешке и одлаже праћење помоћу Зауставити функција.
Го такође пружа алате за форматирање изворног кода. Поред алата за профилисање, можете користити алате за форматирање за одржавање стандарда кода. Тхе гофмт алат је уграђени алат за форматирање који можете да користите за форматирање вашег Го изворног кода на основу одређених правила за ваше пакете.