Size: a a a

Scalability Camp — распределенный чат [СММщик в отпуске на Бали]

2020 January 16

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Vitaliy Levchenko
какой конкретно возможности нет? Прибить горутину к треду?
Угу, прибить.
источник

VL

Vitaliy Levchenko in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Угу, прибить.
она есть
источник

VL

Vitaliy Levchenko in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
в пакете runtime
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
А перешедулить на другой тред?
источник

VL

Vitaliy Levchenko in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
А перешедулить на другой тред?
только отвязать и привязать к текущему

https://golang.org/pkg/runtime/#LockOSThread
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Насколько я понял согласно
https://stackoverflow.com/questions/8378092/issue-with-runtime-lockosthread-and-runtime-unlockosthread/8378536#8378536
нет возможности прибить несколько горутин к одному и тому же физ треду так, чтобы для этой пачки горутин не было нужды использовать мьтексы или каналы. А этого очень хотелось бы в некоторых сценариях
источник

VL

Vitaliy Levchenko in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Насколько я понял согласно
https://stackoverflow.com/questions/8378092/issue-with-runtime-lockosthread-and-runtime-unlockosthread/8378536#8378536
нет возможности прибить несколько горутин к одному и тому же физ треду так, чтобы для этой пачки горутин не было нужды использовать мьтексы или каналы. А этого очень хотелось бы в некоторых сценариях
смена горутины сравнима по времени с мьютексом. Зачем эта микроортимизация?
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Vitaliy Levchenko
смена горутины сравнима по времени с мьютексом. Зачем эта микроортимизация?
Дело не в микрооптимизации. А в желании исключить такой тип ошибок как "deadlock" как класс
источник

TS

Timur Safin in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Дело не в микрооптимизации. А в желании исключить такой тип ошибок как "deadlock" как класс
taskset -c 0 your-go-utility --options

:)
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Timur Safin
taskset -c 0 your-go-utility --options

:)
Я думал что этот секрет Яндекс.Такси под NDA 😂
источник

p

pragus in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Vitaliy Levchenko
смена горутины сравнима по времени с мьютексом. Зачем эта микроортимизация?
больно оказаться на другом ядре
источник

GG

George Gaál in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
больно оказаться на другом ядре, когда память вообще далеко-далеко
источник

p

pragus in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
George Gaál
больно оказаться на другом ядре, когда память вообще далеко-далеко
ну да, numa
источник

p

pragus in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
но даже в пределах одного кристалла это ощутимо
источник

p

pragus in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Насколько я понял согласно
https://stackoverflow.com/questions/8378092/issue-with-runtime-lockosthread-and-runtime-unlockosthread/8378536#8378536
нет возможности прибить несколько горутин к одному и тому же физ треду так, чтобы для этой пачки горутин не было нужды использовать мьтексы или каналы. А этого очень хотелось бы в некоторых сценариях
синхронизация все равно нужна будет, даже если в 1 потоке, т.к. переключение между горутинами мы не контролируем
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
pragus
синхронизация все равно нужна будет, даже если в 1 потоке, т.к. переключение между горутинами мы не контролируем
Не знаю где у вас "все равно нужна будет", у меня в плюсах я всегда знаю где будет отдано управление моему рантайму, заведующему сопрограммами.
Да и в Go, если речь о нём, вряд ли есть техническая возможность переключить лёгкий поток в точках, отличных от мест ввода-вывода, вызова стороннего кода и кода выполняемого на другом физ-треде. Т.е, между
 var i, j int = 1, 2
 k := 3
 c, python, java := true, false, "no!"
горутина не имеет возможности переключиться, так как там управление рантайму не передаётся
источник

IB

Ilya Baryshnikov in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Не знаю где у вас "все равно нужна будет", у меня в плюсах я всегда знаю где будет отдано управление моему рантайму, заведующему сопрограммами.
Да и в Go, если речь о нём, вряд ли есть техническая возможность переключить лёгкий поток в точках, отличных от мест ввода-вывода, вызова стороннего кода и кода выполняемого на другом физ-треде. Т.е, между
 var i, j int = 1, 2
 k := 3
 c, python, java := true, false, "no!"
горутина не имеет возможности переключиться, так как там управление рантайму не передаётся
сопрограммы здесь это корутины или фьючеры? у корутин вроде нет рантайма
https://youtu.be/j9tlJAqMV7U
источник

GG

George Gaál in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
> у корутин вроде нет рантайма
в голанге есть ?
источник

A

Alexander in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Что сопрограммы(coroutines), что корутины, что gorutine'ы  всё одно и то же - это функции, которые могут в любой точке засуспендиться(выйти наружу, передав управление какому-то другому коду без разрушения локальных переменных) и зарезюмиться, вернувшись в ту же точку, откуда ранее засуспендились через yield-подобный вызов.
источник

p

pragus in Scalability Camp — распределенный чат [СММщик в отпуске на Бали]
Alexander
Не знаю где у вас "все равно нужна будет", у меня в плюсах я всегда знаю где будет отдано управление моему рантайму, заведующему сопрограммами.
Да и в Go, если речь о нём, вряд ли есть техническая возможность переключить лёгкий поток в точках, отличных от мест ввода-вывода, вызова стороннего кода и кода выполняемого на другом физ-треде. Т.е, между
 var i, j int = 1, 2
 k := 3
 c, python, java := true, false, "no!"
горутина не имеет возможности переключиться, так как там управление рантайму не передаётся
в го переключимся на io, сне, мьютексах, sync.Cond и каналах
источник