@ru_python

Страница 5754 из 9768
Алексей
25.06.2018
17:23:40
я не знаю почему, но это реально дурацкое решение

Aragaer
25.06.2018
17:23:57
при желании можно сделать

Google
Nikolay
25.06.2018
17:24:01
в чем основное отличие тредов от процессов?
в отсутствии необходимости дополнительных механизмов шаринга памяти

Алексей
25.06.2018
17:24:03
Nikolay
25.06.2018
17:24:18
серьёзно?
серьезно

Алексей
25.06.2018
17:24:24
типа я не могу сделать два инстанса питона в одном процессе?

Nikolay
25.06.2018
17:24:35
Alex
25.06.2018
17:24:37
шо?

Алексей
25.06.2018
17:24:43
вот кого за это винить?

Nikolay
25.06.2018
17:25:00
вот кого за это винить?
поплачься в мейлинг лист :)

Алексей
25.06.2018
17:25:01
с питоном то ладно, у него какие-никакие потоки есть

Alex
25.06.2018
17:25:05
гхм... а зачем?

Nikolay
25.06.2018
17:25:06
ты не один такой

Tishka17
25.06.2018
17:25:13
а воркеры - это, вроде, процессы
Эм. Вот хз насчёт процессов

Google
Алексей
25.06.2018
17:25:18
но вот в v8 зачем так сделали непонятно вообще

Aragaer
25.06.2018
17:25:36
в отсутствии необходимости дополнительных механизмов шаринга памяти
на самом деле в линуксе разницы ваще нет. Можно при желании сделать "тред", имеющий общую память с родителем, но не имеющий доступа к файловой системе

Nikolay
25.06.2018
17:25:45
гхм... а зачем?
ну, можно было бы запускать по интерпретатору на поток, а дальше выкинуть GIL... но это утопия

Aragaer
25.06.2018
17:25:49
разные наборы флагов при создании

Alex
25.06.2018
17:26:23
ну, можно было бы запускать по интерпретатору на поток, а дальше выкинуть GIL... но это утопия
мне сложно представить класс задач где подобное было бы оправдано.

Nikolay
25.06.2018
17:26:30
на самом деле в линуксе разницы ваще нет. Можно при желании сделать "тред", имеющий общую память с родителем, но не имеющий доступа к файловой системе
разница есть в наборе того, что именно аллокейтится. При желании можно сделать шаред мемори, да, но это потребует дополнительных телодвижений

Aragaer
25.06.2018
17:26:39
не, я не про то

что именно аллокейтится задается флагами

Nikolay
25.06.2018
17:26:55
мне сложно представить класс задач где подобное было бы оправдано.
любой, где хочется легковесные воркеры, как в го или эрланге

Алексей
25.06.2018
17:27:03
мне сложно представить класс задач где подобное было бы оправдано.
мне для v8 легко представить такой класс задач

Alex
25.06.2018
17:27:04
он о том что процессы и потоки в линуксе реализуются почти одинаково

Aragaer
25.06.2018
17:27:13
с одним флагом ты получишь "тред", с другим "процесс", а с третьим вообще что-то невообразимое

Alex
25.06.2018
17:27:21
через вызов сисколла clone()

Nikolay
25.06.2018
17:27:27
что именно аллокейтится задается флагами
ну, а еще для процесса используется fork()/exec(), а для потока - pthread_create()

Aragaer
25.06.2018
17:27:37
они оба внутри используют clone

с разным набором флагов

Nikolay
25.06.2018
17:27:51
Alex
25.06.2018
17:28:17
оверхед при создании процесс в копировании таблицы страниц.

Denis
25.06.2018
17:28:20
Google
Алексей
25.06.2018
17:28:30
хотя кстати я читал, что нода вроде позволяет относительно безболезненно поменять движок

Nikolay
25.06.2018
17:28:38
Aragaer
25.06.2018
17:28:41
его может не быть - таблица страниц может быть подготовлена заранее

даже не так, она все равно будет сделана

просто в случае "процесса" там будет copy-on-write флаг проставлен

Nikolay
25.06.2018
17:29:02
хотя кстати я читал, что нода вроде позволяет относительно безболезненно поменять движок
ну, на деле ее еще только поверх майкрософтовского запускали вроде

Алексей
25.06.2018
17:29:07
во во

Denis
25.06.2018
17:29:09
как вариант, почему нет
С тем же успехом можно запустить несколько процессов

Nikolay
25.06.2018
17:29:14
но тут чужой мир, я не знаю деталей

С тем же успехом можно запустить несколько процессов
не с тем же, если у тебя есть шаред мемори

и move()

Denis
25.06.2018
17:30:15
не с тем же, если у тебя есть шаред мемори
Шаред мемори и между процессами есть

Alex
25.06.2018
17:30:47
более корректно будет сказать что потоки разделяют общее адресное пространство

Nikolay
25.06.2018
17:30:52
Шаред мемори и между процессами есть
только если явно создашь

(parent/child не считаю)

Denis
25.06.2018
17:31:16
Надо - создаешь, не надо - не создаешь. Профит все еще непонятен

Шарить объекты между тредами все равно не получится из-за того, что гила нет

Aragaer
25.06.2018
17:32:25
более корректно будет сказать что потоки разделяют общее адресное пространство
более корректно будет сказать, что потоками называют такие процессы, которые разделяют адресное пространство со своим родителем

Google
Nikolay
25.06.2018
17:32:35
Надо - создаешь, не надо - не создаешь. Профит все еще непонятен
ну, я пробовал работать с шаред мемори на сишке. Это много боли

Denis
25.06.2018
17:32:40
смотря какие объекты и как шарить
Питоновские. Со счетчиком ссылок, предками и всем таким

Nikolay
25.06.2018
17:33:03
Питоновские. Со счетчиком ссылок, предками и всем таким
ну, формально тут как раз нужна спецификация для move()

Denis
25.06.2018
17:33:21
ну, я пробовал работать с шаред мемори на сишке. Это много боли
Если это спрятано глубоко внутри, пользователя это не волнует

Nikolay
25.06.2018
17:33:23
чтобы передавать овнершип объекта в другой поток

Если это спрятано глубоко внутри, пользователя это не волнует
мы же сейчас про проблемы инженеров, а не пользователей?

пользователю вообще срать, потоки там или процессы

Denis
25.06.2018
17:34:06
чтобы передавать овнершип объекта в другой поток
Опять же, надо делать по копии для каждого потока либо делать все иммутабелбным

Aragaer
25.06.2018
17:35:05
ну, я пробовал работать с шаред мемори на сишке. Это много боли
не особо много. Просто надо еще и синхронизацию руками делать

ладно, я офф, через час баиньки уже

Denis
25.06.2018
17:35:25
Сложно это software transactional memory, а с общей памятью разобраться можно

Nikolay
25.06.2018
17:35:32
Опять же, надо делать по копии для каждого потока либо делать все иммутабелбным
я боюсь соврать, не знаю тонкостей, но что мешает передавать в соседний поток уникальный указатель на шаред мемори?

как делают в C++

Denis
25.06.2018
17:36:43
я боюсь соврать, не знаю тонкостей, но что мешает передавать в соседний поток уникальный указатель на шаред мемори?
Передать-то можно. Но менять его и то, что достижимо из него по ссылкам, сможет только один, иначе надо будет локами обмазываться

А это еще медленнее, чем гил

Nikolay
25.06.2018
17:37:18
но вообще как работает unique_ptr?

Denis
25.06.2018
17:37:54
Он работает в одном потоке

Google
Nikolay
25.06.2018
17:38:19
да, но ты можешь его передать в другой поток

Denis
25.06.2018
17:38:35
Но тогда я сам должен о нем забыть

Alex
25.06.2018
17:39:17
Nikolay
25.06.2018
17:39:19
разумеется

Denis
25.06.2018
17:39:27
Alex
25.06.2018
17:39:32
или я не понял проблему

Nikolay
25.06.2018
17:39:36
в этом и суть избегания одновременного доступа

Alex
25.06.2018
17:40:14
Не путаю
как ты передшь unique_ptr в другой поток?

Denis
25.06.2018
17:40:21
А объект указывает на свой класс, а класс на много чего еще, и этому всему иногда хочется менять рефкаунт. Причем хочется и нам, и ему

Donaudampf
25.06.2018
17:40:52
ничосе развили тему

Denis
25.06.2018
17:40:54
То есть все внутренности питона надо копировать

Denis
25.06.2018
17:41:43
В С++ лок фри shared_ptr уже долго не могут сделать. Потому что сложно

Alex
25.06.2018
17:42:02
тогда лоично да, что в потоке, откуда его передаешь придется о нем забыть

Denis
25.06.2018
17:42:56
Не только о нем, а обо всем, на что он ссылается. Либо менять ссылки, но это называется запиклить и отправить

NoNick
25.06.2018
17:45:03


как в питоне это делается?

Denis
25.06.2018
17:50:45
std::move, кстати, ничего не делает, он просто кастует к rvalue-ссылке

Страница 5754 из 9768