May. 26th, 2019

дыбр

May. 26th, 2019 08:40 pm
juan_gandhi: (Default)
Утром хоть и просыпался в 7:10 и в 8:15 (внутренние часы примерно столько и показывали), но встал в 9. А чо, подруги нету, скучно. Включил телевизор, там фигня, в смысле, новости; переключил на Амазон, там ничего не найти, поставил Pride and Prejudice, дошел до титров, да отправился завтракать.

А за завтраком уже смотрел Серенаду. Вах, какое кино! Не в смысле киноискусства, это на уровне курочки рябы, а в смысле музыки и
танцев. Заканчивается все, правда, балетом на льду и катанием на лыжах. Голубой Огонек. Но ничо, ничо.

Полил помидоры. Вышел на газон, поменял valve (клапан) в поливалке, который не работал. Присоединил, все норм работает.

Открыл рабочий комп, что-то там потыкал пальцев, да закрыл. Вообще, сил нет, и спать хочется. Кошка пришла, так вместе сидели за компом.

Потом таки пошел перекрашивать стенку за нашим контрактором. Нет, сначала потолок подкрасил, где его краской от стены было замазано.

Поставил в качестве звука болтовню Теренса МакКенны. Нет, не смог. Я все пытался понять, он мудрец или тупой. Решил что таки тупой. Нафиг-нафиг, про всякие там "размерности" выслушивать. В школе бы, что ли, уже начали учить про размерности. Не знаю, ну. Это же, считай, dependency injection, если в программистских терминах.

Ну это ладно. Через силу покрасил стенку; таки хорошо же, все доделано, да? Убрал весь этот полиэтилен, повесил телевизор над камином.



Ха, добавил в слайды еще один слайд, "жалобы на Скалу", Ну типа отмазки, почему у меня в коде такая жопа.

На обед съел четверть кочана капусты, со сметаной, и тертую морковку, со сметаной. Да пофиг же, и вкусно.

Стал слушать Дэмиена Конвея. Классно он со временем обращается. Но когда продемонстрировал, как его whilst работает (Фибоначчи с линейной скоростью - а где хвостовая рекурсия?!), тут я попал.

Пошел искать этот whilst по интернетам. Нашел пример на гитхабе у Теппеи Сато, еще 2016-й год, на джаваскрипте. Теппеи потом скальщиком стал, выступал у нас. Окей, но там джаваскриптовый Promise. Стал изучать, напоролся на офигенный текст Доменика Дениколы про это все.

Решил разобраться, а как с Promises в скале. Стал читать про No Free Lunch и документацию по промисам и фьючерсам в скале. Потом на so стал читать про blocking. Да блин, я все неправильно делал! И коллеги мои тоже все неправильно распараллеливали. Бум чинить. Никогда не задумывался.

Короче, если у вас есть фьючерсы, до хрена, то стандартный executor их гоняет по стольку, сколько есть процессоров. Это, может быть, умно, если мы процессоры занимаем. Но если у нас там длинные операции, io всякое, то это фигня. Надо долгий код заворачивать в blocking, тогда экзекьютор запускает новые нитки. Вот дешевый пример:

object experiment {
import scala.concurrent._
val ec = scala.concurrent.ExecutionContext.Implicits.global

def main(args: Array[String]) {

val futures = (0 to 100) foreach { n =>
Future {
println("starting Future: " + n)
blocking {
println("in Future: " + n)
Thread.sleep(30)
println("out Future: " + n)
}
println("ending Future: " + n)
}(ec)
}

Thread.sleep(1000)
}
}

Здесь мы вообще не ждем завершения этих фьючерсов, но это неважно. Я нарочно поставил sleep в конце.

Короче, если blocking есть, то много ниток (все 100), а если нету, то всего шесть (на моем компе).

От така хуйня, малятки. Пошел дальше учиться программированию. Подруга скоро приедет.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

September 2025

S M T W T F S
 1 2345 6
78 9 10 111213
14 151617 181920
212223 24252627
282930    

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 27th, 2025 04:38 pm
Powered by Dreamwidth Studios