Alexander
и вот столкнулся с ткой проблемой
Kirill
Попробуй на линухе покатай
Petr
Да можно просто потрассировать процесс
Petr
посмотреть затыки
Petr
там ничего сложного
Petr
взыть какой нибудь dtrace или strace
Alexander
А чо там в макоси, truss какой-нибудь?
Petr
dtrace есть
Petr
в макоси
Alexander
трассировать думаю будет ад, ибо увижу кучу syscall ов работающих подключений
Andrey
Всем привет. пытаюсь прочитать pom.xml вот в такую структуру, но в модулях почему-то только один элемент. Что я пропустил? type XmlFile struct { GroupId string `xml:"groupId"` ArtifactId string `xml:"artifactId"` Version string `xml:"version"` Modules []Module `xml:"modules"` } type Module struct { ModuleName string `xml:"module"` }
Constantine️
потому что ты забыл сюда xml запостить как пример?
Constantine️
или это черный ящик? )
Alexander
Есть еще вариант, что вот эти горутины с подключениями работают может быть как-то монопольно и горутина, обрабатывающая accept не срабатывает?
Petr
нет там никакого ада
Alexander
parent, dependency, profile, repositories, build еще там куча всего
Andrey
лул) я бы посмотрел есть ли xsd для помника. так-то, навскидку, там гораздо больше всего может быть
Мне все не нужно... только перечисленные поля. Делал по примеру и в нем в массив все вычитывается, а у меня нет :(
Alexander
попробую, спасибо
kås
pprof делал?
kås
и go tool trace
Andrey
Народ, посмотрите пожалуйста что не так?! Хочу увидеть все элементы, а не только один после парсинга: https://play.golang.org/p/AgC5vdmtsE5
Alexander
и go tool trace
Неа, тоже попробую
Илья
или даже так
Andrey
или даже так
спасибо!
David
Привет
David
Какая тут политика в отношении вакансий?
David
можно постить? 🙂
Alexander
можно постить? 🙂
говорят если посмотреть описание чатика, можно найти ответы на кучу вопросов
Alexander
могу спойлернуть, что без вилки лучше не постить
David
побьют?
Tigran
затравят!
Tigran
впрочем, с вилкой тоже могут
David
окей
David
https://aviasales.recruitee.com/o/backend-developer-golang-python
David
вилка $1-10k в месяц 🙂
Alexander
релокация в тай, емнип
David
да
Tigran
итс э трэп
Anonymous
итс э трэп
есть инсайд ?)
Alexander
итс э трэп
а питонисты и не против
Anonymous
итс э трэп
итс э трап
David
если интересно, переписываем поисковый движок с питона на го
David
так что работы много, проект свежий и будет интересно )
Alexander
надо было просто сразу на джяве писать
David
ага, я тоже так говорю
Anonymous
надо было просто сразу на джяве писать
чтобы сразу с джавы на го переписывать?
David
но это итеративный процесс
Tigran
поисковый движок на питоне
Tigran
это ж надо было придумать
David
это еще и заимплементить надо было
Alexander
*на расте
как же на нем сразу писать, если его нет ?
Tigran
а зачем свой поисковый движок вообще?
David
затем что мы метапоиск
David
это бизнес авиасейлс
David
в общем, не стесняемся и аплаимся, можно еще друзьям порекомендовать
Alexander
Блин, как вообще по этому tool trace что-то понять
Alexander
Alexander
И какой вывод из этого я должен сделать? что у меня много Read/Write, ну это и так понятно
Tigran
У тебя настолько много Read/Write, что оптимизировать что-то ещё бессмысленно
Alexander
Моя задача сделать так, чтобы коннекты коннектились, а не зависали...
Илья
хм, попробуй отцепить тред который аксептит явно
Илья
runtime.LockOSThread()
Denis
Моя задача сделать так, чтобы коннекты коннектились, а не зависали...
Прошу прощения, если уже было, но еполл не пробовал?
Alexander
Походу я как-то не так сделал, но LockOSThread чет не помог
Alexander
func (srv *Server) Start() (err error) { runtime.LockOSThread() address := srv.host + ":" + srv.port srv.listener, err = net.Listen("tcp", address) if err != nil { log.WithError(err).WithFields(log.Fields{ "address": address, }).Error("Error on listener start") os.Exit(1) } log.WithFields(log.Fields{ "address": address, }).Info("Server start") for { log.Info("accepting start...") conn, err := srv.listener.Accept() if err != nil { log.WithError(err).Error("accepting connection") os.Exit(1) } log.WithFields(log.Fields{ "from": conn.RemoteAddr().String(), "to": conn.LocalAddr().String(), }).Info("accepting connection") srv.acceptConnection(conn) } return }
Alexander
попробовал так
Alexander
блин, надо было в gist завернуть, соре
Alexander
Прошу прощения, если уже было, но еполл не пробовал?
не пробовал, ибо слабо представляю что это такое
Alexander
и для полноты картины func (srv *Server) acceptConnection(conn net.Conn) { srv.connLock.Lock() defer srv.connLock.Unlock() connection := NewConnection(srv, conn) srv.connections[connection.id] = connection go srv.connections[connection.id].handleConnection() }
Alexander
вот как раз handleConnection() и занимается Read/Write в свой net.Conn
Denis
не пробовал, ибо слабо представляю что это такое
Если не получится иное, то попробуй. На питоне, к примеру, это стоило мне минут 15 времени с разбором в теме. Так и ищется — epoll golang
Denis
в golang уже epoll под капотом юзается в network pool
https://gist.github.com/wolfeidau/33dcf2ea2648a10bb9e7 — не актуально?
Daniel
зависит от того, чего вы хотите
Je
https://gist.github.com/wolfeidau/33dcf2ea2648a10bb9e7 — не актуально?
здесь для файловых дескрипторов, но зачем, если есть select на каналах? + для сети уже есть epoll в кишках, как я говорил
Je
https://golang.org/src/runtime/netpoll_epoll.go#L59