|
|
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никВ этом и была идея - сделать ссылку с мапой экзекьюторов доступной для всех через инжекшен( на каждый Symbol по экзекьютору) - и сабмитить оба типа тасков их именно в один и тот же экзекьютор(брать по ключу symbol), извиняюсь может путано пишу. Да, я понял идею. Просто когда у тебя в ScheduledThreadPoolExecutor нарисовалась очередь из квот, как ты воткнешь CloseTask в нужную позицию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:30:35 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никЯ сейчас подумаю над этим - с ходу не понял, можете на пальцах пока я подумаю? Ложная тревога. Код: java 1. Пропустил trendBar.getPeriodType(). Все будет нормально. Но проблемы с видимостью содержимого List<TrendBar>, когда делаем запрос getTrendBars, все равно будут. Тк там простой LinkedList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:32:01 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никДа - согласен, неинуитивно? Или все-таки неправильно? Оба. неинуитивно (хотя может я уже под вечер не соображаю) - что делает calculateEndPeriodDate() я могу понять только из имени. Что делает код, сходу не понятно. Надо разбираться. возможно неправильно - end date вычисляется от текущего момента, а не от start date. Почему так? Какая в этом особая задумка? Да именно в этом и задумка - ведь нам нужен интервал от текущего времени ровно до следующей минуты\секунды чтобы зашедулить клоузтаск. А считать от startDate - неправильно, потому что при инициализации создается trendBar у которого startDate может быть, допустим, в середине минуты. Ну неинтуитивно -да.. Посмотри реализацию Calendar.getTime(). Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:32:08 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никДа, но я делал описку, что упростил проверки на нулл в storage, так как считаю что он не шарится между системами(вроде как доверенный код), и гарантировано правильно инициализирован, но вообще учту, спасибо. А null может и не снаружи попасть. Сам где-нибудь образуется из-за баги с многопоточностью. :) Так там все по идее иммьютабл и наполняется после инициализации - наверное не очевидно просто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:33:10 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
schwaзабыл никЯ сейчас подумаю над этим - с ходу не понял, можете на пальцах пока я подумаю? Ложная тревога. Код: java 1. Пропустил trendBar.getPeriodType(). Все будет нормально. Но проблемы с видимостью содержимого List<TrendBar>, когда делаем запрос getTrendBars, все равно будут. Тк там простой LinkedList. Да и ConcurrentModificationException там можно будет словить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:34:16 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никВ этом и была идея - сделать ссылку с мапой экзекьюторов доступной для всех через инжекшен( на каждый Symbol по экзекьютору) - и сабмитить оба типа тасков их именно в один и тот же экзекьютор(брать по ключу symbol), извиняюсь может путано пишу. Да, я понял идею. Просто когда у тебя в ScheduledThreadPoolExecutor нарисовалась очередь из квот, как ты воткнешь CloseTask в нужную позицию? Да, теперь когда вы указали на косяк с таймстампами в квоте - становится очевидно что этот вариант неправильный, а так по идее это разруливалось через натурал ордеринг) Типа если клоуз таск стартовал - то квот с таймстампами < now нет.. Ну в общем тут комплекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:35:07 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Эта проблема с вложенной коллекцией лечится очень просто заменой LinkedList на тот же CopyOnWriteList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:36:12 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
getStartDate().equals(from) - правда? 1ms реально на что-то влияет? Double price; - хорошо что сумму считать не попросили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:37:14 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
schwaЛожная тревога. Код: java 1. Во-во. И я о том же. Хрен разберешь где тут какая коллекция что делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:40:12 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
schwaschwaпропущено... Ложная тревога. Код: java 1. Пропустил trendBar.getPeriodType(). Все будет нормально. Но проблемы с видимостью содержимого List<TrendBar>, когда делаем запрос getTrendBars, все равно будут. Тк там простой LinkedList. Да и ConcurrentModificationException там можно будет словить. Пожалуй что да, вы бы использовали CopyOnWriteArrayList? Но я еще об этом подумаю, ибо я помню что думал об этом, и пришел к выводу что все будет ок, задание делал давно - надо вспоминать, хотя вот сейчас посмотрел - вроде вы правы, если тут косяк - то вот его то я точно должен был не допускать, даже странно... Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:40:55 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczgetStartDate().equals(from) - правда? 1ms реально на что-то влияет? Double price; - хорошо что сумму считать не попросили. Так потому и дабл, раз не попросили - так бы был децимал:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:41:50 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczgetStartDate().equals(from) - правда? 1ms реально на что-то влияет? Ну вот тут хз - разве не влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:44:17 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никschwaпропущено... Да и ConcurrentModificationException там можно будет словить. Пожалуй что да, вы бы использовали CopyOnWriteArrayList? Но я еще об этом подумаю, ибо я помню что думал об этом, и пришел к выводу что все будет ок, задание делал давно - надо вспоминать, хотя вот сейчас посмотрел - вроде вы правы, если тут косяк - то вот его то я точно должен был не допускать, даже странно... Спасибо! Все же вы правы:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:45:40 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
В общем получается что ошибка с таймстампом была самой эпичной - не будь ее, сделал бы без шедулера, как Blazkowicz предложил, ну и LinkedList - но я думаю будь это единственной ошибкой - закрыли бы глаза. Ну и часть кода неинтуитивна - вот и найди тут баланс между простотой и очевидностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:51:40 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл ник, getStartDate().equals(from) || getStartDate().after(from) == !getStartDate().before(from) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:52:33 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никВ общем получается что ошибка с таймстампом была самой эпичной - не будь ее, сделал бы без шедулера, как Blazkowicz предложил, ну и LinkedList - но я думаю будь это единственной ошибкой - закрыли бы глаза. Ну и часть кода неинтуитивна - вот и найди тут баланс между простотой и очевидностью. Я что-то не догнал про LinkedList. Поясните, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:55:26 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл ник, getStartDate().equals(from) || getStartDate().after(from) == !getStartDate().before(from) Да, так лучше) Хотя, возможно, для кого-то менее интуитивно, опять же к вопросу о балансе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:57:29 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никДа именно в этом и задумка - ведь нам нужен интервал от текущего времени ровно до следующей минуты\секунды чтобы зашедулить клоузтаск. А считать от startDate - неправильно, потому что при инициализации создается trendBar у которого startDate может быть, допустим, в середине минуты. Ну неинтуитивно -да.. Я всё равно не понял задумки. Есть startDate и endDate. Оба вычисляются в зависимости от текущего времени. Т.е. длина не фиксирована и может быть любой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:58:57 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никВ общем получается что ошибка с таймстампом была самой эпичной - не будь ее, сделал бы без шедулера, как Blazkowicz предложил, ну и LinkedList - но я думаю будь это единственной ошибкой - закрыли бы глаза. Ну и часть кода неинтуитивна - вот и найди тут баланс между простотой и очевидностью. Я что-то не догнал про LinkedList. Поясните, плз. ЛинкедЛист - непотокобезопасная коллекция, а там идет ремув, апдейт из разных потоков - могут быть проблемы с visibility, на x86 - врядли, но теоретически неправильно. Ну и при переборе через итератор - может возникнуть исключение ConcurrentModifying.. в отличие от CopyOnWrit'a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 19:59:36 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никДа именно в этом и задумка - ведь нам нужен интервал от текущего времени ровно до следующей минуты\секунды чтобы зашедулить клоузтаск. А считать от startDate - неправильно, потому что при инициализации создается trendBar у которого startDate может быть, допустим, в середине минуты. Ну неинтуитивно -да.. Я всё равно не понял задумки. Есть startDate и endDate. Оба вычисляются в зависимости от текущего времени. Т.е. длина не фиксирована и может быть любой? startDate - когда трендбар реально начал мониториться( при начальной инициализации может быть в середине минуты, дня и тп - в зависимости от типа трендбара). closeDate - еобходимо чтобы было 00.00.00. Теоретически поток может вычислить startDate и уснуть - тогда если считать closeDate от начальной - то может возникнуть лаг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:02:49 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никЛинкедЛист - непотокобезопасная коллекция, а там идет ремув, апдейт из разных потоков - могут быть проблемы с visibility В упор не вижу где это. Есть добавление add(trendBar) в persist Есть new LinkedList(oldList) - но он не итератор, ConcurrentModifying не выкинет, вроде. забыл никНу и при переборе через итератор - может возникнуть исключение ConcurrentModifying.. в отличие от CopyOnWrit'a И где он у нас этот итератор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:04:07 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никBlazkowiczпропущено... Я всё равно не понял задумки. Есть startDate и endDate. Оба вычисляются в зависимости от текущего времени. Т.е. длина не фиксирована и может быть любой? startDate - когда трендбар реально начал мониториться( при начальной инициализации может быть в середине минуты, дня и тп - в зависимости от типа трендбара). closeDate - еобходимо чтобы было 00.00.00. Теоретически поток может вычислить startDate и уснуть - тогда если считать closeDate от начальной - то может возникнуть лаг Хотя нет, я походу сам себя обхитрил. Вообще все неправильно имхо, в моем варианте трендбар может охватить два периода, а если считать от startDate такого не будет, но вот что с этим делать? Если startDate допустим 00:59:980, потом поток засыпает, считает closeDate через 20 миллисекунд, но ведь уже должен быть новый трендбар! Хм... надо подумать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:09:11 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
забыл никstartDate - когда трендбар реально начал мониториться( при начальной инициализации может быть в середине минуты, дня и тп - в зависимости от типа трендбара). closeDate - еобходимо чтобы было 00.00.00. Теоретически поток может вычислить startDate и уснуть - тогда если считать closeDate от начальной - то может возникнуть лаг Ладно. Потом попробую воткнуть почему между this.startDate = new Date(); и Calendar currentCalendar = Calendar.getInstance(); может быть лаг , а между Calendar currentCalendar = Calendar.getInstance(); и if(getTimeUnit().equals(unit)){ уже не может быть лага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:10:05 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никЛинкедЛист - непотокобезопасная коллекция, а там идет ремув, апдейт из разных потоков - могут быть проблемы с visibility В упор не вижу где это. Есть добавление add(trendBar) в persist Есть new LinkedList(oldList) - но он не итератор, ConcurrentModifying не выкинет, вроде. забыл никНу и при переборе через итератор - может возникнуть исключение ConcurrentModifying.. в отличие от CopyOnWrit'a И где он у нас этот итератор? Да, вот я и вспомнил почему я не сделал copyOnWrite - но теперь, подумав, думаю все же зря, new LinkedList(oldList) и add(trendBar) - идут в разных потоках, теоретически второй поток может не увидеть последнего добавленного трендбара, да и вообще может не увидеть ничего на экзотических архитектурах. А итератора и правда нету(видимого), но вот вопрос а не используется ли он в конструкторе new LinkedList(oldList) - и я не уверен что все-таки не выкинет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:17:09 |
|
||
|
Ревью многопоточного кода:)
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никstartDate - когда трендбар реально начал мониториться( при начальной инициализации может быть в середине минуты, дня и тп - в зависимости от типа трендбара). closeDate - еобходимо чтобы было 00.00.00. Теоретически поток может вычислить startDate и уснуть - тогда если считать closeDate от начальной - то может возникнуть лаг Ладно. Потом попробую воткнуть почему между this.startDate = new Date(); и Calendar currentCalendar = Calendar.getInstance(); может быть лаг , а между Calendar currentCalendar = Calendar.getInstance(); и if(getTimeUnit().equals(unit)){ уже не может быть лага. Да, я уже сомневаюсь в имплементации, и даже пока не знаю как можно сделать правильно, подумаю на выходных:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2012, 20:18:26 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38042190&tid=2130549]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 306ms |
| total: | 469ms |

| 0 / 0 |
