Войти
ФлеймФорумПрограммирование

Страшный БАГ в Visual C++ (9 стр)

Страницы: 16 7 8 9 10 11 Следующая »
#120
16:06, 26 мар. 2020

beejah

> Те, кто наговнокодил вывернутое наизнанку говно будут кричать
Может мне показалось, но кричат тут только те, кто никогда не говнокодил, лол

> что в итоге придурочный клиент тыкает сервак палочкой по принципу
Ты электронной почтой пользуешься? Наверное нет, потому что там лютый говнокод - все современные клиенты написаны таким образом, что клиент периодически опрашивает почтовый сервер.


#121
16:18, 26 мар. 2020

PANDA
Да, реальный кейз. Даже с джавой работает, без малейших проблем. Ну как без проблем. в 2012 надо было данные раскладывать в SoA и использовать primitive collections вместо родных. Но это уже наши внутренние бизнес-логики.

Ну и плюс настройка ядра в линуксе, юлимиты и прочее. В целом - никакого рокетсаенса, как я уже говорил, даже тогда. А уж в 2020 с этим вообще любая макака с доступом к гуглу и стековерфлоу справится.

#122
16:22, 26 мар. 2020

Ghost2
> все современные клиенты написаны таким образом, что клиент периодически
> опрашивает почтовый сервер.
Современные - нет.

POP3 - это не современный протокол. И да, если ты думаешь, что там логика опрашивания в клиентах вида

while(true) {
   checkNewMailOnServer();
   Thread.sleep(10000);
}
то ты сильно ошибаешься. Попробуй подумать, как можно сделать периодическое опрашивание сервера без слипов.

#123
(Правка: 16:41) 16:40, 26 мар. 2020

9К720
> while(true) {
> checkNewMailOnServer();
> Thread.sleep(10000);
> }
Между почтовыми серверами типа sendmail, postfix и т.п. общение до сих пор как-то так сделано:

const int default_sleep_delay_ms = 10000;
int current_sleep_delay_ms = default_sleep_delay_ms;
while(true)
{
  if(!checkNewMailOnServer())
  {
    current_sleep_delay_ms *= 2;
  }
  else
  {
    current_sleep_delay_ms = default_sleep_delay_ms;
  }
  Thread.sleep(current_sleep_delay_ms);
}
#124
16:45, 26 мар. 2020

9К720

> POP3 - это не современный протокол
Речь не о современных протоколах, а о современных клиентах.

> Попробуй подумать, как можно сделать периодическое опрашивание сервера без слипов.
Я этих способов знаю - от "написать драйвер" до WM_TIMER. Только кроме явного sleep все они это sleep где-то внутри ОС. Не вижу большой функциональной разницы между кодом выше и каким-нибудь из этих способов. Разве что выше нет способа кикнуть процесс. А еще я про все это выше уже писал.

#125
17:01, 26 мар. 2020

9К720

Про клиент-серверное взаимодействие по протоколу NTP что-нибудь скажешь?

#126
17:05, 26 мар. 2020

PANDA
> до сих пор как-то так сделано:
увеличивающийся таймаут между попытками - это вообще к слипу глубоко параллельно. Первое это концептуальные свойства архитектуры (ты кстати очередь отправки забыл), слип - это оператор управления потоком выполнения. Как гото. Это как ты щас мне доказываешь, что невозможно написать почтовый сервер без goto.

Ghost2
> Речь не о современных протоколах, а о современных клиентах.
Ну так там нет слипов. Вообще нет.

Ghost2
> Только кроме явного sleep все они это sleep где-то внутри ОС
youdontsay.jpg

Правда что ли? Т.е. ты хочешь сказать, что когда ты дергаешь SetTimer, то где-то внутри user32.dll создается поток, который погружается в слип на uElapse прежде чем дернуть твою lpTimerFunc

Я не специалист по архитектуре винды, но мне кажется она как-то не так устроена, как ты рассказываешь.

#127
17:07, 26 мар. 2020

Ghost2
> Про клиент-серверное взаимодействие по протоколу NTP что-нибудь скажешь?
Пока ничего. Я не смотрел исходники ntpd. Там правда слип стоит?

#128
(Правка: 17:44) 17:37, 26 мар. 2020

Ghost2
Ты мне втираешь какую-то дичь. Я не понимаю твоих рандомных фраз.
Серьезно.

Что это, блин, за логика такая - "говно - это транзистор, потому что мы можем насрать в телевизор, а внутри телевизора есть транзисторы"? Не понимать.

#129
(Правка: 17:49) 17:44, 26 мар. 2020

9К720

> Т.е. ты хочешь сказать, что когда ты дергаешь SetTimer, то где-то внутри user32.dll создается поток
Когда ты вызываешь SetTimer, то где-то внутри создается некий объект синхронизации, который дергается шедулером по прерыванию от таймера, а засыпаешь ты при этом в GetMessage или MsgWaitForMultipleObjects.

> но мне кажется она как-то не так устроена, как ты рассказываешь
Пока что я об этом не рассказывал.

> Там правда слип стоит?
Возможно там используется select с таймаутом, таймеры или clock_nanosleep. Биджа там наверху предлагал крон использовать. Это не про слипы, а про polling как принцип.

#130
17:47, 26 мар. 2020

Ghost2
> а засыпаешь ты при этом в GetMessage или MsgWaitForMultipleObjects.
Вот ты в пять утра срать захочешь, принципиально долежишь до звонка будильника, обосрешься, разумеется, будешь лежать в говне и говорить "а какая разница, я же посрал".

#131
17:53, 26 мар. 2020

9К720
> Ты бредишь. Я где-то говорил обратное? Зачем ты споришь с голосами в своей
> голове.
...А действительно, зачем? Слишком много свободного времени, наверно.

Ghost2
> Речь не о современных протоколах, а о современных клиентах.
Если говорить о технологии - то я уверен, что все современные клиенты работают на WebSocket или аналогах. Long polling, как я понял, - это велосипедная вариация на тот же принцип.
Если об архитектуре клиента - то либо циклом по сообщениям, либо на колбасках.

#132
18:05, 26 мар. 2020

beejah

> Ты мне втираешь какую-то дичь. Я не понимаю твоих рандомных фраз.
Удивляюсь я с тебя. Ты там выше написал "никто никого не поймет".
Или ты себя не имел в виду? Тогда это тревожный звоночек.

> Вот ты в пять утра срать захочешь, принципиально долежишь до звонка будильника
Уясни уже, что я не пропагандирую слипы как универсальное решение, при помощи которого нужно решать что-либо с привязкой ко времени. Просто есть задачи, где это - самый простой и надежный выход, который никаким образом не влияет на функционирование системы в целом, а альтернативы тянут за собой простыни кода, драйверы, или даже изменения в аппаратуре. Ежели у тебя есть привычка обсираться по ночам, то слипы действительно лучше не использовать, получится говнокод в прямом и переносном смысле.

#133
18:55, 26 мар. 2020

Ghost2
> Просто есть задачи, где это - самый простой и надежный выход,
Нет и не может быть такой задачи - "уложить флоу спать в мертвую на ВАНГАПЕРИОД".
Ситуации - есть. А задачи - нет. И есть говнокодерки, которые думают, что это - задача.

#134
19:04, 26 мар. 2020

beejah

> Нет и не может быть такой задачи
Ты или опять ничего не понял (про тучу кода и драйверы), или у тебя слишком скудный кругозор для того, чтобы назвать кого-то гоанокодерами.

Страницы: 16 7 8 9 10 11 Следующая »
ФлеймФорумПрограммирование