Что нового в мире наук

Nov 23, 2013 19:55

Я в этом своём гугле, при всех его достоинствах, кажется, немного отстал от жизни: стал мало общаться с функциональным сообществом, меньше читать книжек и разных блогов, и т.п ( Read more... )

Leave a comment

Comments 35

(The comment has been removed)

antilamer November 24 2013, 05:32:43 UTC
Ну, я ознакомился с самой идеей :) и более плотно с wavelet trees, variable-bit-length arrays и еще чем-то.

Reply

kurilka November 29 2013, 05:29:51 UTC
А может у тебя и ссылки есть подходящие про идею?

Reply


antilamer November 24 2013, 06:29:08 UTC
Класс, спасибо! Порекомендуешь что-нибудь, что тебя особенно впечатлило?

Reply


cd_riper November 24 2013, 06:18:00 UTC
> гугловую технологию fibers

про сопрограммы еще Кнут писал хрен знает в каком году.
CreateFiber появилась еще в WinNT 4.
и вообще поддержка ядра для этой штуки не нужна -- смотрим boost context.

новое -- это хорошо забытое старое.

Reply

antilamer November 24 2013, 06:27:32 UTC
Я извиняюсь за грубость, но Вы бы посмотрели видео-то, перед тем как заводить свою обычную циническую шарманку. Я же даже специально в посте написал, чем эта реализация революционна по сравнению с другими известными мне (в т.ч. и с CreateFiber). Идея "давайте сделаем фиберы" не нова. Реализация с такими характеристиками - нова.

Reply

antilamer November 29 2013, 18:48:29 UTC
Я тут узнал, что в Windows 7 появилась штука, гораздо более близкая к гугловским фиберам, чем фиберы из NT 4 - UMS: http://msdn.microsoft.com/en-us/library/windows/desktop/dd627187(v=vs.85).aspx

Спросил у команды фиберщиков, что общего / различного; буду держать в курсе.

Reply

furia_krucha December 16 2013, 07:50:16 UTC
UMS скорее похож на scheduler activations: UMS Scheduler Thread получает от ядра уведомления о блокировках и разблокировках UMS threads. Реализация, описанная Тернером ближе к модели userspace интерфейса ucontext, где при блокировке происходит handoff от блокирующегося потока на планировщик.

Reply


9000 November 24 2013, 06:31:45 UTC
Правильно ли я понимаю, что "нативные зелёные нитки" идейно близки goroutines, но сделаны прямо на уровне ядра, а не диспетчера ниток из Go? Соотв. блокирующие вызовы подправлены в libc, чтобы работать с такими нитками, а не с процессами? Интересно, что сделано со стеком; в Go для создания сотен тысяч мелких ниток применяется крошечный стек, наращиваемый по запросу. Тут, кажется, не только libc придётся поправить.

(Да, мне ужасно лень смотреть видео; поищу слайдов.)

Reply

antilamer November 24 2013, 06:41:00 UTC
Как я запомнил - в ядро добавлена совсем капелька поддержки, позволяющая, грубо говоря, свопить ядрёный контекст двух настоящих ниток. Больше ядра ничего не касается - просто иногда нитки свопятся без ведома ядра. Продолжают работать всякие блокирующие операции; продолжают работать все тулы, расчитывающие найти стектрейс и локальные переменные в привычных местах (дебаггеры, профайлеры); продолжают работать thread-local примитивы; продолжает периодически просыпаться и успешно работать preemptive scheduler; и т.п ( ... )

Reply

cd_riper November 24 2013, 12:03:42 UTC
еще раз.
если мы говорим про механизм, обеспечивающий реализацию сопрограмм, то решение гугла очень спорное.
да, здорово, что оно видится как обычные треды, но все это сделано как хак в ядре линукса. при этом есть переносимые user land решения (см. boost context), которые, к тому же, работать будут еще быстрее, потому что нет накладных расходов на создание честного потока на уровне ОС, плюс операция переключения не требует вызова ядра (вызов этот относительно дешевый, но все равно не бесплатный).

ну а сгородить огород поверх сопрограмм со своим блекджеком и шлюхами -- отдельная большая песня. это могут быть те механизмы, которые есть в языке Go или тот же boost coroutines. кому что больше нравится.

Reply

antilamer November 24 2013, 16:58:04 UTC
> здорово, что оно видится как обычные треды
Так в этом весь смысл! В этом вся разница между "решением, применимым для какой-нибудь конкретной задачи" и "решением, которое можно полностью прозрачно встроить в базу из полумиллиарда строк кода на С++ и сопутствующих сотен или тысяч различных инструментов, использующихся десятками тысяч инженеров".

Естественно, между переносимостью на ОС, не использующие linux kernel (как я понимаю, они это собираются законтрибьютить в ядро), и этим, выбрали это.

> нет накладных расходов на создание честного потока
Тут обычно тоже нет - реюзаются. Создание фибера стоит практически столько же, сколько раньше стоило добавить колбек в thread pool.

Reply


triampurum November 24 2013, 15:05:22 UTC
Посмотрел в букмарки, из последнего вас может заинтересовать https://probmods.org/

Reply


Leave a comment

Up