Comments (15)
А что подразумевается под деревом вызовов методов? Есть ли разница между стеком вызовов и деревом вызовов?
from selective-profiling-test.
Под деревом вызовов некоторого подмножества методов я имею в виду следующее:
- дерево строится отдельно для каждого потока
- узлами дерева являются вызовы методов из данного подмножества
- вызов X является потомком вызова Y iff выполнение Y начинается раньше, а заканчивается позже выполнения X
- непосредственные потомки вызова упорядочены по времени начала исполнения
Каждому узлу дерева вызовов соответствует стек вызовов в некоторый момент времени, а дерево, таким образом, является историей стеков вызовов (интересующих нас методов).
from selective-profiling-test.
Код можно вставлять только в места, где есть // your code here
?
from selective-profiling-test.
Не обязательно. Главное - не менять порядок вызовов и возвращаемые значения существующих методов.
from selective-profiling-test.
Как я заметил, каждый метод вызывает лишь один из двух других методов, либо не вызывает ни одного.
- Правильно ли я понимаю, что, исходя из этого, у каждого узла дерева может быть не более одного потомка?
- Если мы, например, в определённом потоке вызываем метод abc, из него def, из него снова abc, из него xyz, то дерево вызовов данного потока будет выглядеть как abc->def->abc->xyz, верно?
- После выполнения main надо вывести деревья вызовов для всех потоков?
from selective-profiling-test.
- Да, пример получился не очень реалистичный. Решение должно работать и в общем случае. Вы можете изменить реализацию методов, чтобы это было более наглядно.
- Верно, при условии что никакие другие методы не вызываются.
- Да, для всех потоков.
from selective-profiling-test.
Насколько сильно надо "вылизать" код? Я уже написал целую документацию к 3 маленьким классам и не могу остановиться.
from selective-profiling-test.
Что подразумевается под "чтением из другого файла"? Просто прочитать или прочитать и построить аналогичное дерево?
"непосредственные потомки вызова упорядочены по времени начала исполнения" можно пояснить?
если у меня в методе a() случайно вызывается либо метод ab() либо метод ac(), то у них будет равнозначное начало времени исполнения, потому что вызовется только один из них. И понять какой метод будет вызван при самом первом обращении к a() невозможно. Как в таком случае сортировать?
a{
ab{...}
ac{...}
}
from selective-profiling-test.
Лучше, чтобы код был понятен без документации, но какие-то нетривиальные места можно пояснять в комментариях. Я буду больше смотреть на логику кода, но чистота будет вам в плюс.
Да, под чтением подразумевается чтение и вывод содержимого файла в каком-то виде, например, в консоль, как в предыдущей части задания.
Исполнение программы в каждом потоке линейно, так что вызовы методов упорядочены по времени. В процессе выполнения при обращении к a() будет вызван только один метод. Информацию об этом вызове и нужно сохранить. Если метод не был вызван ни разу, он не должен присутствовать в дереве вызовов.
from selective-profiling-test.
Что подразумевается под выводом дерева в файл? Обычный механизм сериализации или некоторый pretty printing с парсером?
from selective-profiling-test.
Типы аргументов не нужно сохранять, только сами значения?
Нужно ли хранить данные в файле очень структурировано или допускается сохранять информацию очень близкую к строчкам вывода, и почти не заниматься парсингом?
from selective-profiling-test.
Формат файла остается на ваше усмотрение, но нужно объяснить, почему он был выбран.
Типы аргументов можно не сохранять.
from selective-profiling-test.
Т.е нужно сохранить значения метода .toString() аргументов?
Получение аргументов методов и имени метода должно быть реализовано программно, или можно самому явно написать, что сохранять?
Наверное, нужно вывести деревья для каждой задачи, а не потока?
from selective-profiling-test.
Тот же вопрос.
Как я понимаю, выводить деревья всё-таки для задачи, а не для потока надо, разве нет? Иначе деревья будут очень странными для деревьев вызовов.
from selective-profiling-test.
Только сейчас заметил последние вопросы. Если ответы окажутся существенными для вашего решения, можете его обновить.
Да, достаточно сохранять toString от аргументов. В данном задании можно указать имена методов и значения аргументов прямо в коде.
Вывести нужно для потока, но в данном случае это действительно может быть несколько деревьев. Тем не менее, они упорядочены по времени, и эту информацию не нужно терять. Можно добавить, например, фиктивный корень с именем потока, или просто выводить их подряд.
from selective-profiling-test.
Related Issues (1)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from selective-profiling-test.