@dlangru

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

но я не видел Go ни разу

Pavel
22.06.2016
09:24:57
go да

это жесть

Google
Макс
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
Но это не совсем копия того что сделали в д
это совсем не копия, просто dub не поддерживает таких импортов, только через свой репозитарий, думал вы сравниваете "через репозитарий" и "напрямую с github"

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

Pavel
22.06.2016
09:31:31
а, в Go захардкожена только поддержка гитхаба?
Отчного ответа не знаю, но как минимум хотелось бы видеть универсальный импортер из любых протоколов.

И чтобы не было завязок на урлы

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

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

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

Pavel
22.06.2016
09:34:09
Справедливости ради, с именем пакета в дабе так же, не?
Даб это все-таки сторонняя надстройка над самим языком. А импорты в языке менеджеронезависимые и локализованные

Oleg
22.06.2016
09:34:33
Олег, правильно я понимаю что у нас внутри процесса потоки общую память имеют?
почти, есть TLS по умолчанию в D, чтобы в общей лежали надо shared использовать

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
файберам и потокам нужна эта информация

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

Страница 28 из 719