Size: a a a

2020 August 08

AM

Artem Molotov in PHP
Aleksandr Khristenko
Ладно, видимо опять проблемы с терминологией. Я имею в виду parallel computing.
Если я верно понимаю, то одно включает другое, да
источник

SP

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

A

Aleksandr Khristenko in PHP
Artem Molotov
> И цель паралельности это разбить одну задачу на несколько подзадач и посчитать их одновременно паралельно, т.е. подзадачи связаны.

Не согласен. Имхо, параллельными могут быть совершенно разные задачи. Как в одном зале будет танцевать танцор, а в другом делать ремонт строитель.
А то что ты описал у меня попадает по concurrent computing.
источник

SP

Sergey Protko in PHP
у нас даже били по рукам если юзал select а не epoll
источник

A

Aleksandr Khristenko in PHP
Sergey Zolotov
хватит уже пихать в одну плоскость синхронность/асинхронность и потоки/непотоки. это ж неверно изначально и зависит сильно от рантайма
Ну синхронность/асинхронность это же про блокируемое/неблокируемое взаимодействие с внешним миром?
источник

АГ

Алексей Гевондян... in PHP
Aleksandr Khristenko
Ну синхронность/асинхронность это же про блокируемое/неблокируемое взаимодействие с внешним миром?
скорее про жду / не жду) ну да, иными словами
источник

AM

Artem Molotov in PHP
Aleksandr Khristenko
А то что ты описал у меня попадает по concurrent computing.
Мне кажется, ты зря смотришь на вид/форму задачи и она не имеет отношения к concurrent computing и parallel computing. Важен сам процесс взаимодействия, если я сейчас не туплю.
источник

АГ

Алексей Гевондян... in PHP
Artem Molotov
Мне кажется, ты зря смотришь на вид/форму задачи и она не имеет отношения к concurrent computing и parallel computing. Важен сам процесс взаимодействия, если я сейчас не туплю.
осталось только разобраться, между чем и чем)
источник

AM

Artem Molotov in PHP
Алексей Гевондян
осталось только разобраться, между чем и чем)
между задачами, хотя и тут можно их в несколько слоёв построить и потом путаться
источник

AM

Artem Molotov in PHP
(т.е. задачи действительно могут делиться на подзадачи и запускаться параллельно, но не обязаны и могут быть совершенно разными)
источник

AM

Artem Molotov in PHP
такс, пора спать
источник

АГ

Алексей Гевондян... in PHP
вот про задачи соглашусь. да. эти задачи могут выполняться и в одном потоке и в разных. и в том и в другом случае, синхронно асинхронно. крч 4 варианта есть)
источник

MM

Maksim Masiukevich in PHP
Алексей Гевондян
вот про задачи соглашусь. да. эти задачи могут выполняться и в одном потоке и в разных. и в том и в другом случае, синхронно асинхронно. крч 4 варианта есть)
так что там про разницу? я так ничего и не понял
источник

АГ

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

АГ

Алексей Гевондян... in PHP
спать пора)
источник

AM

Artem Molotov in PHP
Такс, я тут пример про бутылочное горлышко писал и уже сам запутался. Точно пора спать
источник

MM

Maksim Masiukevich in PHP
Алексей Гевондян
между параллелизмом и асинхронностью? слушай, может ну нафиг...
кому спать, а кому ещё даймонд апать) так что я не тороплюсь)
источник

AM

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

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

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

AM

Artem Molotov in PHP
надеюсь не затупил
источник

SP

Sergey Protko in PHP
синхронно 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 которые достаточно квалифицированы что бы работать с тредами и это не я).
источник