Я написал тест для тестирования многогрутинов в го. И я использую инструмент go pprof, чтобы проанализировать, как оптимизировать мой код. Когда я использую top10, чтобы показать некоторую информацию, я получил следующие выходные данные:
Showing top 10 nodes out of 167
flat flat% sum% cum cum%
4700ms 17.86% 17.86% 4700ms 17.86% runtime.pthread_cond_signal
1790ms 6.80% 24.66% 1790ms 6.80% cmpbody
1470ms 5.59% 30.24% 1620ms 6.16% syscall.syscall
1360ms 5.17% 35.41% 3280ms 12.46% runtime.scanobject
1170ms 4.45% 39.86% 1410ms 5.36% runtime.findObject
960ms 3.65% 43.50% 960ms 3.65% runtime.pthread_cond_wait
950ms 3.61% 47.11% 950ms 3.61% runtime.memmove
650ms 2.47% 49.58% 650ms 2.47% runtime.usleep
650ms 2.47% 52.05% 2490ms 9.46% talent.TopN.func1
630ms 2.39% 54.45% 2890ms 10.98% runtime.mallocgc
Очевидно, что runtime.pthread_cond_signal тратит так много времени на мой код. Я пытаюсь найти в Google полезную информацию о runtime.pthread_cond_signal. Но не удалось их получить. Хотя в некоторых постах упоминается об этом, они просто дают несколько советов, и я все еще не могу понять, что с ними делать.
Я полагаю, что эта ситуация относительно использования канала в Go, но я не уверен в своем мнении, и я также не знаю некоторых подробностей об этом.
Я хочу знать следующее:
Что заставило бы идти тратить так много времени в runtime.pthread_cond_signal обычно?
В нормальных условиях , как оптимизировать ваш код go в такой ситуации happens
Не стесняйтесь предоставлять любую информацию и советы.
Буду признателен за любую помощь от вас.