- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
Шесть месяцев назад я нашёл в Интернете книжку "Dive into Python". Странная книжка, толстая,
да ещё на не русском языке.
Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял.
Но что-то не отпускало меня - я пошёл на python.org и стал изучать стандартную библиотеку,
старательно, скурпулёзно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру,
где было написано про PEP8.
То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке
безумия бросился зубрить эту конвенцию по написанию питоньего кода.
У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё
это время - и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди
глубокой ночи.
Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду.
Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css,
но там всё оказалось совсем не сложно.
Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток
производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом.
Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду.
Я как-то ожидал большего и был немного разочарован.
Гугл, снова гугл. Десятки статей и тем на форуме… Довольно быстро я заметил, что люди часто пишут про
какие-то "асинхронные веб-сервера". Часто встречались названия Tornado и Gevent. Я прочитал про них
подробнее - и был просто ошеломлён. Как мне это раньше не приходило в голову?!
Это же, это просто гениально, чёрт меня побери!
Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в
строчки кода. Я просто не мог остановиться. Чашка кофе… Ещё чашка…
Мой небольшой кусочек софта приобретал кристалльную чистоту,
я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи
Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.
Наиувлекательнейший мир хай-лоада открылся передо мной. Позже я изучил ещё много классных вещей
типа сверхбыстрых асинхронных key-value-хранилищ, или, например, такого необычного подхода к
обработке данных, как map-reduce.
Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и
незнакомых концепций.
Я летел вперёд, оставляя за спиной ступень за ступенью.
За пол-года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм.
Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки
проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.
А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на
себе завистливый взгляд.
Это был взгляд какого-то сливающегося с толпой неудачника, взгляд преисполненный ненависти,
презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную
жизнь писал на каком-нибудь си-шарпе или там на джаве, проводя долгие дни в одиночестве.
И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался
построить замок из навоза.
IKing 30.05.2014 15:01 # +9
3.14159265 30.05.2014 15:24 # +3
guest 30.05.2014 18:47 # 0
WGH 31.05.2014 17:01 # +1
Не совсем корректное сравнение. Особой нужды изолировать друг от друга "псевдо-нити" в рамках одного сервера просто нет.
guest 31.05.2014 17:25 # 0
bormand 31.05.2014 17:28 # +2
Не сравнивай кооперативную многозадачность на уровне всей оси с ней же на уровне одного серверного процесса.
Если у тебя кооперативные псевдо-треды виснут (не долго считают, а именно виснут) - значит твой код хуёвый. И его никак не спасет вытесняющий планировщик т.к. повисший тред продолжит отжирать память и проц, и только продлит мучения серверного процесса.
Если же они просто долго думают, то ты забыл вынести синхронный код или вычисления куда-нибудь в тредпул.
guest 31.05.2014 17:32 # 0
А где разница?
bormand 31.05.2014 17:39 # +1
Виснут - навсегда, ошибка. Повисший тред не занимается полезной работой. И фактически уже мёртв.
Долго считают - просто долго считают или чего-то ждут на блокировке. Это полезная работа. Тред еще жив.
P.S. В нормальный однопоточно-асинхронный код никто не вставляет сложные вычисления и блокирующие вызовы. Поэтому виснуть или долго считать там как бы и нечему... Большинство таких серваков тупо перекидывают пакеты между клиентами, базой, и чем-нибудь еще. Ну и немножко их обрабатывают.
bormand 31.05.2014 17:45 # +1
guest 31.05.2014 18:27 # 0
bormand 31.05.2014 18:36 # 0
Да вроде даже на обычную четырехъядерку поднимают 4 ноды.жс.
guest 31.05.2014 19:07 # 0
guest 31.05.2014 18:27 # +1
Пользователи это оценят.
>. В нормальный однопоточно-асинхронный код никто не вставляет сложные вычисления и блокирующие вызовы.
Да, только на других данных вызовы внезапно могут стать долгими.
bormand 31.05.2014 18:37 # 0
Предложи альтернативу. Только не просто "многопоточность", а чуть подробнее - распиши когда стартуют потоки, что в них происходит и т.п.
guest 31.05.2014 19:08 # 0
bormand 31.05.2014 19:16 # +1
Так я и думал. Альтернатив не знаешь, лишь бы обосрать однопоточный асинхронный сервак.
> Просто в нормальных языках можно делать по 500 тредов
Удачи.
guest 31.05.2014 21:47 # 0
>Удачи.
Что, в %твойязык% тоже нельзя?
guest 31.05.2014 21:48 # 0
bormand 31.05.2014 22:19 # +1
Конструктивная критика предполагает альтернативы и/или советы. А деструктивная критика в духе "винда говно" или "асинхронные серваки - мастдай" нинужна. Все, кто пишет однопоточные асинхронные серваки и так прекрасно знают об этом недостатке. И тупо не юзают непредсказуемо долгие вычисления и блокирующие операции в таком коде.
> Что, в %твойязык% тоже нельзя?
А в твоем рантайме (что-то мне намекает, что это не эрланг), 500 активных тредов случаем не опускают КПД ниже плинтуса? И ты так и не рассказал, когда ты запускаешь эти треды, и что именно в них происходит. Без этих подробностей обсудить твою конфигурацию, увы, не выйдет.
> Если для серваков еще можно лепить асинхронную хрень, то для многопоточных клиентов - это перебор
Спасибо, кэп. Все и без тебя знают, что серебряной пули нет. Однопоточную асинхронную хрень пилили для i/o bound задачек. Если у тебя там cpu bound парсинг или какие-то вычисления - они явно не для тебя.
UPD: Бля, не на тот пост ответил. Это к 234031 и 234032.
guest 31.05.2014 22:30 # +2
>И тупо не юзают непредсказуемо долгие вычисления и блокирующие операции в таком коде.
Так я и пишу, что долгой могут внезапно стать многие конструкции.
>А в твоем рантайме (что-то мне намекает, что это не эрланг), 500 активных тредов случаем не опускают КПД ниже плинтуса?
Проверялки прокси работают на ура, что-то пиздеца замечено не было.
>Однопоточную асинхронную хрень пилили для i/o bound задачек.
Однопоточную хрень лепили там, где многопоточная давала слишком большой оверхед. В остальном у нее одни недостатки. Иначе бы ее не пидорнули из винды и сидели с ней до сих пор.
Если ты все что я пишу "и так знаешь", может, перестанешь мои посты читать или хотя бы комментировать, как будто я не оправдал твои ожидания и мне что-то за это будет, да?
bormand 31.05.2014 17:54 # +1
Ну и небольшой вброс: критикуешь - предлагай. Предложи свою альтернативу, и мы ее обсудим :)
guest 31.05.2014 18:26 # 0
eth0 30.05.2014 19:36 # 0
LispGovno 30.05.2014 20:06 # +3
guest 30.05.2014 22:41 # 0
eth0 31.05.2014 16:56 # 0
3.14159265 02.06.2014 13:44 # +2
guest 03.06.2014 22:01 # −2
3.14159265 03.06.2014 22:26 # +2
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
.
У
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
.
У
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
.
У
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
.
У
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
.
У
Н
Е
Г
О
У
Ж
Е
В
Т
Е
Ч
Е
Н
И
Е
П
О
Л
У
Т
О
Р
А
Л
Е
Т
К
А
Ж
Д
А
Я
Н
О
Ч
Ь
Б
Ы
Л
А
О
Ч
Е
Н
Ь
Т
Р
У
Д
Н
О
Й
,
И
Т
Е
П
Е
Р
Ь
Е
Г
О
А
Н
У
С
Б
Ы
Л
Р
А
З
Р
А
Б
О
Т
А
Н
Н
А
С
Т
О
Л
Ь
К
О
,
Ч
Т
О
О
Н
Б
Е
З
Т
Р
У
Д
А
М
О
Г
С
П
Р
Я
Т
А
Т
Ь
В
Н
Ё
М
Б
А
Н
К
У
С
Г
У
Щ
Ё
Н
К
И
bormand 03.06.2014 22:38 # +2
3.14159265 03.06.2014 22:42 # +1
3.14159265 03.06.2014 23:16 # +2
https://github.com/bormand/govnokod-board/
Он умеет всё это скрывать.
3.14159265 02.06.2014 23:11 # +1
guest 03.06.2014 22:01 # −3
3.14159265 02.06.2014 23:16 # +2
guest 03.06.2014 22:01 # −3
3.14159265 02.06.2014 23:22 # +1
guest 03.06.2014 22:00 # −2
3.14159265 02.06.2014 23:26 # −1
1024-- 02.06.2014 23:34 # 0
Ш
е
с
т
ь
м
е
с
я
ц
е
в
н
а
з
а
д
я
н
а
ш
ё
л
в
И
н
т
е
р
н
е
т
е
к
н
и
ж
к
у
"
D
i
v
e
i
n
t
o
P
y
t
h
o
n
"
.
С
т
р
а
н
н
а
я
к
н
и
ж
к
а
,
т
о
л
с
т
а
я
,
д
а
е
щ
ё
н
а
н
е
р
у
с
с
к
о
м
я
з
ы
к
е
.
У
с
е
р
д
н
о
п
р
о
ч
и
т
а
л
е
ё
,
м
е
т
о
д
и
ч
н
о
и
в
д
у
м
ы
в
а
я
с
ь
,
н
о
т
а
к
и
н
и
ч
е
г
о
и
н
е
п
о
н
я
л
.
Н
о
ч
т
о
-
т
о
н
е
о
т
п
у
с
к
а
л
о
м
е
н
я
-
я
п
о
ш
ё
л
н
а
p
y
t
h
o
n
.
o
r
g
и
с
т
а
л
и
з
у
ч
а
т
ь
с
т
а
н
д
а
р
т
н
у
ю
б
и
б
л
и
о
т
е
к
у
,
с
т
а
р
а
т
е
л
ь
н
о
,
с
к
у
р
п
у
л
ё
з
н
о
,
о
т
к
о
р
к
и
д
о
к
о
р
к
и
.
Г
у
г
л
я
п
р
и
м
е
р
ы
к
о
д
а
,
я
н
а
т
к
н
у
л
с
я
н
а
п
о
с
т
в
б
л
о
г
е
о
д
н
о
г
о
г
у
р
у
,
г
д
е
б
ы
л
о
н
а
п
и
с
а
н
о
п
р
о
P
E
P
8
.
Т
о
,
ч
т
о
р
а
с
с
к
а
з
ы
в
а
л
э
т
о
т
у
м
у
д
р
ё
н
н
ы
й
о
п
ы
т
о
м
к
о
д
е
р
,
н
а
с
т
о
л
ь
к
о
в
п
е
ч
а
т
л
и
л
о
м
е
н
я
,
ч
т
о
я
с
л
о
в
н
о
в
п
р
и
п
а
д
к
е
б
е
з
у
м
и
я
б
р
о
с
и
л
с
я
з
у
б
р
и
т
ь
э
т
у
к
о
н
в
е
н
ц
и
ю
п
о
н
а
п
и
с
а
н
и
ю
п
и
т
о
н
ь
е
г
о
к
о
д
а
.
У
м
е
н
я
т
р
я
с
л
и
с
ь
р
у
к
и
,
п
о
т
е
л
у
п
р
о
к
а
т
ы
в
а
л
и
в
о
л
н
ы
в
о
з
б
у
ж
д
е
н
и
я
,
я
,
м
о
ж
н
о
с
к
а
з
а
т
ь
,
б
и
л
с
я
в
э
к
с
т
а
з
е
в
с
ё
э
т
о
в
р
е
м
я
-
и
т
е
п
е
р
ь
м
о
г
у
п
р
о
ц
и
т
и
р
о
в
а
т
ь
н
а
и
з
у
с
т
ь
л
ю
б
о
й
п
у
н
к
т
,
д
а
ж
е
е
с
л
и
м
е
н
я
р
а
з
б
у
д
и
т
ь
п
о
с
р
е
д
и
г
л
у
б
о
к
о
й
н
о
ч
и
.
Н
о
в
ы
е
з
н
а
н
и
я
о
к
р
ы
л
я
л
и
м
е
н
я
,
я
б
р
о
с
и
л
с
я
п
и
с
а
т
ь
(
ч
т
о
б
ы
в
ы
п
о
д
у
м
а
л
и
?
)
о
ч
е
р
е
д
н
у
ю
и
м
и
д
ж
б
о
р
д
у
.
Я
н
е
п
и
с
а
л
р
а
н
ь
ш
е
и
м
и
д
ж
б
о
р
д
,
э
т
а
б
ы
л
а
м
о
е
й
п
е
р
в
о
й
.
3.14159265 02.06.2014 23:35 # +1
guest 03.06.2014 21:59 # −1
guest 03.06.2014 22:01 # −1
3.14159265 02.06.2014 23:34 # 0
guest 03.06.2014 21:59 # −1
3.14159265 02.06.2014 23:52 # 0
guest 03.06.2014 21:59 # −1
3.14159265 03.06.2014 00:00 # +1
guest 03.06.2014 21:59 # −2
bormand 03.06.2014 04:17 # +1
guest 03.06.2014 04:43 # +1
bormand 03.06.2014 07:42 # 0
bormand 03.06.2014 07:50 # 0
bormand 03.06.2014 15:53 # 0
done
3.14159265 03.06.2014 21:04 # +1
bormand 03.06.2014 21:10 # 0
3.14159265 03.06.2014 21:12 # +3
guest 03.06.2014 21:59 # −2
3.14159265 03.06.2014 21:26 # +2
guest 03.06.2014 22:00 # −2
guest 03.06.2014 22:00 # −2
1024-- 03.06.2014 10:54 # +2
3.14159265 03.06.2014 12:16 # +1
Тем более в ширину еще не каждый сможет.
bormand 03.06.2014 13:08 # 0
guest 03.06.2014 22:00 # −2
guest 03.06.2014 16:50 # 0
bormand 03.06.2014 17:05 # 0
Х.з., я пробовал, мне не понравилось. Затестить можешь поменяв hidden на scroll в строке 325 и убрав строку 326:
guest 03.06.2014 21:57 # 0
g g
o / \ \ / \ o
a| | \ | | a
t| `. | | : t
s` | | \| | s
e \ | / / \\\ --__ \\ : e
x \ \/ _--~~ ~--__| \ | x
* \ \_-~ ~-_\ | *
g \_ \ _.--------.______\| | g
o \ \______// _ ___ _ (_(__> \ | o
a \ . C ___) ______ (_(____> | / a
t /\ | C ____)/ \ (_____> |_/ t
s / /\| C_____) | (___> / \ s
e | ( _C_____)\______/ // _/ / \ e
x | \ |__ \\_________// (__/ | x
* | \ \____) `---- --' | *
g | \_ ___\ /_ _/ | g
o | / | | \ | o
a | | / \ \ | a
t | / / | | \ |t
s | / / \__/\___/ | |s
e | / | | | |e
x | | | | | |x
* g o a t s e x * g o a t s e x * g o a t s e x *
guest 03.06.2014 21:58 # 0
guest 03.06.2014 21:59 # −2
3.14159265 03.06.2014 23:17 # +2
https://github.com/bormand/govnokod-board/
Он умеет всё это скрывать.
3.14159265 03.06.2014 23:54 # +1
guest 11.07.2014 22:12 # −1
g g
o / \ \ / \ o
a| | \ | | a
t| `. | | : t
s` | | \| | s
e \ | / / \\\ --__ \\ : e
x \ \/ _--~~ ~--__| \ | x
* \ \_-~ ~-_\ | *
g \_ \ _.--------.______\| | g
o \ \______// _ ___ _ (_(__> \ | o
a \ . C ___) ______ (_(____> | / a
t /\ | C ____)/ \ (_____> |_/ t
s / /\| C_____) | (___> / \ s
e | ( _C_____)\______/ // _/ / \ e
x | \ |__ \\_________// (__/ | x
* | \ \____) `---- --' | *
g | \_ ___\ /_ _/ | g
o | / | | \ | o
a | | / \ \ | a
t | / / | | \ |t
s | / / \__/\___/ | |s
e | / | | | |e
x | | | | | |x
* g o a t s e x * g o a t s e x * g o a t s e x *
Guest_ 25.08.2021 03:52 # 0