Size: a a a

2020 August 08

АГ

Алексей Гевондян... in PHP
в общем ты предлагаешь объединить многопоточность с асинхронностью. все верно, это самый эффективный вариант решения многих задач, загрузка будет 100%. простоя с ожиданиями не будет.
источник

NO

Nex Otaku in PHP
Примерно так в роад раннере сделано
источник

NO

Nex Otaku in PHP
Нет, это не многопоточность, друг)
источник

NO

Nex Otaku in PHP
Чем поток от процесса отличается знаешь?)
источник

АГ

Алексей Гевондян... in PHP
многопроцессность?
источник

NO

Nex Otaku in PHP
Ну это в корне разные понятия
источник

NO

Nex Otaku in PHP
И оба как правило реализуются на уровне ОС
источник

SZ

Sergey Zolotov in PHP
завязывайте
источник

АГ

Алексей Гевондян... in PHP
более менее знаю. не слишком глубоко, но в целом знаю. с т. зр. загрузки ядер процессора принципиальной разницы между ними нет. но есть принципиальная разница с т. зр. "один процесс" и "много процессов". межпроцессное взаимодействие более сложная и дорогая штука, чем междупоточное. или нет?
источник

АГ

Алексей Гевондян... in PHP
Sergey Zolotov
завязывайте
оффтоп?
источник

SZ

Sergey Zolotov in PHP
уже вчера вам все пояснили несколько человек. зачем обсасывать это дальше?
источник

АГ

Алексей Гевондян... in PHP
а к чему пришли то в итоге? пообсуждали, разошлись, вроде...
источник

NO

Nex Otaku in PHP
Алексей Гевондян
более менее знаю. не слишком глубоко, но в целом знаю. с т. зр. загрузки ядер процессора принципиальной разницы между ними нет. но есть принципиальная разница с т. зр. "один процесс" и "много процессов". межпроцессное взаимодействие более сложная и дорогая штука, чем междупоточное. или нет?
В масштабах нынешнего хайлоада, что межпроцессное, что межпоточное слишком дорого )

Если процессы независимы и самодостаточны, то им не нужно взаимодействие.

Каждому воркеру пофиг на остальные воркеры. Ему что-то прилетело, он прокрутил, выплюнул, ждëт следующего таска. Взаимодействия нет.
источник

SZ

Sergey Zolotov in PHP
Переслано от Sergey Zolotov
concurrency - когда есть конкурентность за ресурсы (время цпу)
parallel - возможность работать параллельно в единицу времени, используя доп ядра цпу

в итоге у тебя может быть:
параллельно, но не конкуретно - между потоками задачи не раскидываются и может быть простой
конкуретно, но не параллельно - когда всего 1 цпу, но пачка задач борются за эфир
конкуретно и параллельно - много цпу и между ними шарятся задачи
источник

SZ

Sergey Zolotov in PHP
Переслано от Anton Shabouta
Вот и ответ. Два ядра никак не обеспечивают параллельность операций на уровне единицы процессора (ибо остается конкурентность чтении/записи регистров (на RISK например) и кэша (тут уже про х86 больше)). Опять же остается всякая экзотика в плане архитектур и ОС. А ну да, еще можно вспомнить занимательные штуки с реальными двух-трех-N процессорными материнками. В моем мире вопросы про конкурентно/параллельно не имеют общего ответа, пока не задана, как минимум, архитектура и ОС
источник

SZ

Sergey Zolotov in PHP
Переслано от Artem Molotov
Имхо, что бы лучше это понять можно представить себе кучу больших шариков и бутылочное горлышко. Если шарики пролазят только один за другим по одному, то это не параллельно. Если бутылочных горлышок два (или две бутылки), то они могут пролазить одновременно и это уже параллельно.

При этом через одно бутылочное горлышко может проходить по одному шарику и по очереди (синхронно) или же можно взять сразу два шарика,  "смять" их и  по чуть-чуть пропихивать каждый из двух вместе. Тогда это асинхронно.

При этом можно представить себе бутылки в бутылках и тогда у нас получиться многопроцессорная система.
источник

SZ

Sergey Zolotov in PHP
Переслано от Sergey Protko
синхронно vs асинхронно это про то что кусочки твоей программы выполняются в определенном порядке или в рандомном порядке.

Например вот у тебя есть две функции:

async function foo(i) {
   await first(i);
   await second(i);
}

await Promise.all([
   foo(1),
   foo(2)
])


в случае синхронной работы у тебя порядок в котором будет выполняться код целиком и полностью зависит от порядка вызова и записи выражений:

- first(1)
- second(1)
- first(2)
- second(2)

Асинхронно наоборот - мы не можем знать заранее в каком порядке будут выполняться операции

- first(1)
- first(2)
- second(2) // потому что раньше успел отработать first2
- second(1) // потому что не успел

То есть мы уже не можем в этом случае предугадать в каком порядке чего будет вызываться, потому нам так важны концепции типа промисов и возможность из них цепочки строить что бы сума не сойти.

Так же есть блокирующие и не блокирующие вызовы.

const data = socket.read(1024)


в этом случае весь поток выполнения будет заблокирован пока клиент тебе пришлет все 1024 байт информации или же пока не закроется коннекшен. И пока это не произойдет никто ничего не выполняет. Процесс по сути в idle

Есть так же понятие паралельных вычислений. Это когда у тебя операции могут во времени пересекаться. Например ты в одном потоке пишешь в файл а в другом читаешь, и эти операции могут накладываться во времени. А что мы знаем про время? что человеческие мозги не умеют процессы разворачивающиеся во времени красиво крутить, потому паралельное вычисление с общей памятью это боль и слезы. И как говорил кто-то (не помню то ли фаулер толи еще кто) - "в мире возмо есть человек 5 которые достаточно квалифицированы что бы работать с тредами и это не я).
источник

SZ

Sergey Zolotov in PHP
Переслано от Sergey Protko
это не взаимозаменяемые концепты. У тебя может быть пул потоков (паралельное выполнение) которое внутри крутит блокирующий синхронный код дабы добиться асинхронности в другом треде
источник

NO

Nex Otaku in PHP
Sergey Zolotov
уже вчера вам все пояснили несколько человек. зачем обсасывать это дальше?
ну меня не было вчера ) дайте высказаться)
источник

SZ

Sergey Zolotov in PHP
на этом тему можно закрыть
источник