
Макс
22.06.2016
09:24:40
Что-то то ли Go, то ли кого-то шумно ругали за «прямые импорты с гитхаба», наверное, это ту же проблему решает
но я не видел Go ни разу

Pavel
22.06.2016
09:24:57
go да
это жесть

Google

Oleg
22.06.2016
09:25:17

Макс
22.06.2016
09:26:09
я не видел, поэтому неберусь судить. так-то да, по идее, что чужой непроверенный код из Dub, что с GitHub, одинаково

Pavel
22.06.2016
09:26:14
объясните чем это плохо?
Если у провайдера злоумышленник поменяет dns'ы на свои то он может прямо в твои бинарники трояны вкомпилировать :D

Oleg
22.06.2016
09:26:49
и как эту проблему решает централизованый репозитарий типа code.dlang.org?

Pavel
22.06.2016
09:27:02
Но это не совсем копия того что сделали в д
Это как если бы в д можно было в импорте писать import http://github.com/dlib/some

Макс
22.06.2016
09:28:32
а разница? ну просто в D это будут две строчки: указание зависимости и непосредственно импорт модуля

Pavel
22.06.2016
09:30:03
Разница в том что в d ты как минимум абстрагируешься от способа доставки кода в твой проект

Oleg
22.06.2016
09:30:16

Макс
22.06.2016
09:30:34
а, в Go захардкожена только поддержка гитхаба?

Pavel
22.06.2016
09:31:31
И чтобы не было завязок на урлы

Макс
22.06.2016
09:32:11
угу. URI на то и задуманы как U :(

Google

Dmitry
22.06.2016
09:32:15
Олег, правильно я понимаю что у нас внутри процесса потоки общую память имеют?

Pavel
22.06.2016
09:32:25
Если репозиторий на гитхабе закрывается или переименовывается - код перестает собираться. Как то это по наркомански, не? ;)

Макс
22.06.2016
09:33:20

Oleg
22.06.2016
09:33:31

Pavel
22.06.2016
09:34:09

Oleg
22.06.2016
09:34:33

Pavel
22.06.2016
09:34:35
Не нравится тебе даб - можешь перепилить его и заставить собирать проект по своему. А в го так не сделать.

Макс
22.06.2016
09:34:49
ясно

Dmitry
22.06.2016
09:34:58
TLS это что такое?

Макс
22.06.2016
09:35:59
thread local storage?

Dmitry
22.06.2016
09:36:34
storage в данном случае это что? Изолированные области памяти?

Макс
22.06.2016
09:37:55
каждая переменная по дефолту видна только в своём потоке. в другом у неё может быть другое значение, если она не shared. Александреску в последней главе очень хорошо разжевал, даже я понял, даром что идиот

Oleg
22.06.2016
09:37:55
ну хотя storage — хранилище
в переводе
не обязательно изолированное
но TLS изолированное

Dmitry
22.06.2016
09:40:53
В итоге сколько видов потоков?
потоки ядра (которые само ядро создает)
потоки юзер-спейс (файберы к ним относятся?)

Oleg
22.06.2016
09:44:27
ну не совсем

Google

Oleg
22.06.2016
09:45:10
вроде в винде и линухе единицей выполнения является не процесс, а поток
файберы это просто переключение контекста внутри одного потока

Dmitry
22.06.2016
09:46:02
поток это тогда что?

Oleg
22.06.2016
09:46:23
вот тут я могу тебе сказать только одно) это структура данных =)

Dmitry
22.06.2016
09:46:24
процесс понятно - изолированная область памяти со своим контекстом выполнения

Oleg
22.06.2016
09:46:33
там тоже не так всё просто
в линухе можно создать поток так, что он станет процессом по сути
в этом я плохо разбираюсь
на самом деле
когда создаётся новый поток можно выбрать, что у него будет общего с родительским (на линухе, имею ввиду)

Dmitry
22.06.2016
09:47:47
короче как проще? Забыть про потоки и думать что есть только процессы?

Oleg
22.06.2016
09:47:52
нет

Oleg
22.06.2016
09:47:59
наоборот, есть только потоки
этим вроде оперирует система

Dmitry
22.06.2016
09:48:27
и внутри потоков можно создавать другие более легковесные потоки файберы?

Oleg
22.06.2016
09:48:40
да, но они не являются паралельно выполняемыми
это псевдопараллелизм
они выполняются по очереди
файбер это состояние регистров и стека

Dmitry
22.06.2016
09:49:37
если файбер зависнет зависнет поток?

Google

Oleg
22.06.2016
09:49:41
очень быстро можно заменить значения регистров и указатель стека и ты как будто переключился на другой поток выполнения
да

Dmitry
22.06.2016
09:50:40
т.е. запоминается лишь часть регистров?

Oleg
22.06.2016
09:51:23
всмысле?)
вот у тебя есть поток

Dmitry
22.06.2016
09:51:52
ну файбр - это типа легковесный поток
так?

Oleg
22.06.2016
09:52:13
пока код в нём выполняется у потока есть состояние
в это состояние входят указатель на команду, значения регистров и стека
файберы позволяют это состояние сохранять и быстро подменять

Admin
ERROR: S client not available

Oleg
22.06.2016
09:53:09
часть каких регистров сохранится? про что ты?
они все хранятся в структуре файбера, если ты про это
нет такой темы, что часть кода одни регистры юзает, а другая часть кода другие
они ими пользуются попеременно

Dmitry
22.06.2016
09:55:55
как я понимаю переключение между потоками операция очень трудозатратная т.к. надо состояние процессора сохранить так?
и загрузить в него данные от нового потока при переключении на него
файбру же по идее нужно тоже самое сделать т.к. старые данные куда-то сохранить

Oleg
22.06.2016
09:57:12
ну да
но поток больше информации имеет и системе нужно переключаться в режим ядра, чтобы сменить поток

Google

Oleg
22.06.2016
09:58:13
а файберы полностью управляются runtime

Dmitry
22.06.2016
09:59:01
а какие данные они несут в себе то? Почему им не нужно регистры процессора сохранять?

Oleg
22.06.2016
09:59:20
кому?

Dmitry
22.06.2016
09:59:31
файберам

Oleg
22.06.2016
09:59:34
файберам и потокам нужна эта информация

Eto
22.06.2016
09:59:51

Dmitry
22.06.2016
10:00:35
блин. никак не могу в толк взять. Если состояние процессора и тем и другим нужно сохранять, то почему же файберы быстрее оказываются

Eto
22.06.2016
10:00:57
Разный уровень.
Файберы в одном потоке работают.

Oleg
22.06.2016
10:02:30
просто при переключении между файберами система не переключается в режим ядра и меньше инфы нужно выставить

Dmitry
22.06.2016
10:04:06
а что есть "переключение в режим ядра"?

Oleg
22.06.2016
10:04:48
это чуть ли не аппаратное прерывание
прграммы из пользовательского пространства многого не могут, чего может ядро
это сделанно для защиты и стабильности

Dmitry
22.06.2016
10:16:43
Я тут такое мнение прочитал интересное:
"Именно поэтому ряд высоконагруженных проектов предпочитают иметь дело с одним физическим потоком, например, Tarantool, авторы которого утверждают, что тем самым сэкономили на блокировках. А если вам нужно утилизировать все ядра, то вы просто запускаете несколько экземпляров Тарантула. "

Oleg
22.06.2016
10:20:58
redis вроде так же работает
но полезно только в системах запрос-ответ

Dmitry
22.06.2016
10:23:16
где запрос не может подвиснуть?

Oleg
22.06.2016
10:23:21
да
если ты пишешь прогу с gui. которая обрабатывает что-то большое, то лучше гуи в одном потоке, а обработку в другом
а, прослушивание сокета в третьем, например
и потоки по мере необходимости обмениваются сообщениями

Мерлин
22.06.2016
10:28:18