
Arky
09.10.2018
10:16:44

Yury
09.10.2018
10:16:55

Пидорас
09.10.2018
10:17:36

Yury
09.10.2018
10:17:50
Кст возможно я ошибаюсь и это только в node.js

Google

Yury
09.10.2018
10:18:07
В node.js такое есть, можно вставить событие в самом конце.

Пидорас
09.10.2018
10:18:35

Anton
09.10.2018
10:18:47

Пидорас
09.10.2018
10:19:03
Это не непоследовательное выполнение цикла
Если не видел, дай хотя бы ссылку на чат JS девелоперов

Yury
09.10.2018
10:20:27

Anton
09.10.2018
10:21:11

Пидорас
09.10.2018
10:21:27

Anton
09.10.2018
10:21:48
и да, я могу тебе на коленке собрать свой ивент луп и сделать так чтобы там по дереву какому-нибудь ивенты исполнялись

Пидорас
09.10.2018
10:22:09

Shmaltorhbooks
09.10.2018
10:22:25
An event loop has one or more task queues.

Anton
09.10.2018
10:22:29
Встречный вопрос. Где ты хочешь это использовать?

Google

Shmaltorhbooks
09.10.2018
10:22:29
Говорят, что очередь
если очередь - последовательно

Arky
09.10.2018
10:22:55

Yury
09.10.2018
10:23:01
Можно параллельно обрабатывать. Event loop не всегда однопоточный.

Shmaltorhbooks
09.10.2018
10:23:04
https://html.spec.whatwg.org/multipage/webappapis.html#event-loops

Пидорас
09.10.2018
10:23:41

Shmaltorhbooks
09.10.2018
10:24:24
но это о коллбэках

Yury
09.10.2018
10:24:49

Пидорас
09.10.2018
10:25:06

Shmaltorhbooks
09.10.2018
10:25:33

Пидорас
09.10.2018
10:25:40
Мой вопрос о однопоточной реализации
Гипертрединг, это совсем другой вопрос

Артур Евгеньевич
09.10.2018
10:26:12

Пидорас
09.10.2018
10:26:16
Он выходит за рамки вопроса о асинхронности, не говоря уже о цикле событий
Я только что прочитал перевод https://medium.com/devschacht/event-loop-timers-and-nexttick-18579cd122e0

Anton
09.10.2018
10:27:56
Пидорас так зачем тебе это?

Пидорас
09.10.2018
10:28:30

Google

Anton
09.10.2018
10:28:40
мы тебе накидали всяких ссылок.
Из твоих сообщений я могу понять, что тебе нужно точно узнать выполняется ли он последовательно или нет.
причем точность нужна прям 100%

Yury
09.10.2018
10:28:46
Мой вопрос о однопоточной реализации
Я думаю в таком случае это вряд ли кому-то понадобиться.
Такая ситуация где сначала handler для 1 события, затем для 2 события и затем снова для 1.

Anton
09.10.2018
10:29:00

Пидорас
09.10.2018
10:29:57
На сколько я понял, она позволяет обрабатывать больше запросов, за еденицу времени.
Например пока ожидается ответ от БД, можно приступить к обработке другого запроса

Anton
09.10.2018
10:30:10
смысл асинхронности, что ты говоришь ивент лупу, вот задачу которую я хочу выполнить, и вот функция куда нужно передать результат работы. и все.
дальше работает ивент лууп и когда он закончит задачу, он тебе передаст результат в твою функцию и там дальше по кругу.
т.е. с такими вопросами тебе нужно читать по ссылке что я дал на сайт мозиллы.
если не можешь на английском есть на русском https://developer.mozilla.org/ru/docs/Web/JavaScript/EventLoop

Пидорас
09.10.2018
10:31:25

Anton
09.10.2018
10:31:50
так же почитай в гугле parallel vs concurecny

Yury
09.10.2018
10:32:02
Параллелизма как раз в JS нет. Такое может запутать.

Пидорас
09.10.2018
10:32:36
Но так как ты не привел доказательств существования реализаций с непоследовательным исполнением очереди в Event Loop, будем считать что их не существует

Yury
09.10.2018
10:32:42

Aleh
09.10.2018
10:32:45

Пидорас
09.10.2018
10:33:26

Yury
09.10.2018
10:33:33

Пидорас
09.10.2018
10:34:54
То есть тебе нужно сначала получить ответ от БД, а потом срендерить страницу, на основе данных. А ты берешь и сначала данные пытаешься рендерить, а потом получаешь ответ от БД, зачем-то

Shmaltorhbooks
09.10.2018
10:36:48

Anton
09.10.2018
10:36:55
я так понимаю ты не понял именно концепции асинхронного программирования

Google

Anton
09.10.2018
10:37:07
т.е. тут вопрос совсем неправильно ставится

Пидорас
09.10.2018
10:37:25

Yury
09.10.2018
10:37:45

Anton
09.10.2018
10:37:45

Shmaltorhbooks
09.10.2018
10:38:00

Anton
09.10.2018
10:38:04
это грубо
но суть именно в этом


Пидорас
09.10.2018
10:38:09
Вот ход моих размышлений:
# Как работает асинхронность?
Асинхронность реализуется через цикл событий.
Когда программа запускается, она:
- Инициализирует цикл событий
- Обрабатывает исходный код, который может взаимодействовать с API цикла событий
- Переходит к обработке цикла событий
# Значит в однопоточном цикле событий команды снова исполняются последовательно?
Теоретически, это может доказать JS код:
setTimeout(()=>{
console.log('Timeout 1');
var start = (new Date).getTime();
while (((new Date).getTime() - start) < 1000) {
console.log('Flood from timeout 1');
}
}, 0);
setTimeout(()=>{
console.log('Timeout 2');
}, 0);
var start = (new Date).getTime();
while(((new Date).getTime() - start) < 1000) {
console.log('Flood');
}
console.log('End');
Здесь последовательность сообщений будет такая: Flood, End, Timeout 1, Flood from timeout 1, Timeout 2
Если код в event loop исполняется последовательно, то моё представление о том, что асинхронный код предназначен для более рационального использования времени (пока ждём ответа от БД - можно заняться чем-то более полезным) ошибочно.


Aleh
09.10.2018
10:38:09

Shmaltorhbooks
09.10.2018
10:39:25
Event loop исполняет события последовательно, но события в лупе появляются в негарантированном порядке
Пока у тебя io не ответило - event loop не будет ждать и простаивать, а выполнит то, что в нём уже лежит

Aleh
09.10.2018
10:40:32
const users = await Promise.all([fetchFromDb(), fetchFromApi()])
Вот последовательный однопоточный код, который параллельно вытянет данные из двух источников


Yury
09.10.2018
10:40:33
Вот ход моих размышлений:
# Как работает асинхронность?
Асинхронность реализуется через цикл событий.
Когда программа запускается, она:
- Инициализирует цикл событий
- Обрабатывает исходный код, который может взаимодействовать с API цикла событий
- Переходит к обработке цикла событий
# Значит в однопоточном цикле событий команды снова исполняются последовательно?
Теоретически, это может доказать JS код:
setTimeout(()=>{
console.log('Timeout 1');
var start = (new Date).getTime();
while (((new Date).getTime() - start) < 1000) {
console.log('Flood from timeout 1');
}
}, 0);
setTimeout(()=>{
console.log('Timeout 2');
}, 0);
var start = (new Date).getTime();
while(((new Date).getTime() - start) < 1000) {
console.log('Flood');
}
console.log('End');
Здесь последовательность сообщений будет такая: Flood, End, Timeout 1, Flood from timeout 1, Timeout 2
Если код в event loop исполняется последовательно, то моё представление о том, что асинхронный код предназначен для более рационального использования времени (пока ждём ответа от БД - можно заняться чем-то более полезным) ошибочно.
Тебе нужно прочитать про IO. Как оно работает.
Мы отправили запрос к другому серверу. Мы можем либо заблокироваться и ждать пока он ответит, либо продолжить делать что-то еще, а когда сервер нам ответит обработать это.


Anton
09.10.2018
10:40:47
Вот ход моих размышлений:
# Как работает асинхронность?
Асинхронность реализуется через цикл событий.
Когда программа запускается, она:
- Инициализирует цикл событий
- Обрабатывает исходный код, который может взаимодействовать с API цикла событий
- Переходит к обработке цикла событий
# Значит в однопоточном цикле событий команды снова исполняются последовательно?
Теоретически, это может доказать JS код:
setTimeout(()=>{
console.log('Timeout 1');
var start = (new Date).getTime();
while (((new Date).getTime() - start) < 1000) {
console.log('Flood from timeout 1');
}
}, 0);
setTimeout(()=>{
console.log('Timeout 2');
}, 0);
var start = (new Date).getTime();
while(((new Date).getTime() - start) < 1000) {
console.log('Flood');
}
console.log('End');
Здесь последовательность сообщений будет такая: Flood, End, Timeout 1, Flood from timeout 1, Timeout 2
Если код в event loop исполняется последовательно, то моё представление о том, что асинхронный код предназначен для более рационального использования времени (пока ждём ответа от БД - можно заняться чем-то более полезным) ошибочно.
в твоем примере ты пользуешься таймером. а ты попробуй вызывать какие-нибудь сайты. через fetch и увидишь разницу


Пидорас
09.10.2018
10:46:10
А причем последовательность к заниманию процессора?
Допустим есть такой код:
Парсинг запроса
Получить данные от БД
Рендер страницы
При асинхронном подходе, каждое следующее действие является коллбеком предыдущего, например.
Изначально исполняется задача "Парсинг запроса".
Помещается в цикл событий, так как весь код исполнен, начинается исполнение из цикла событий.
Сейчас там всего 1 задача, она и исполняется и цикл пополняется следующей задачей "Получить данные от БД".
Теперь выполняется эта задача и цикл пополняется следующей. "Рендер страницы".
После выполнения этой задачи цикл будет ожидать новых задач.
Сейчас я описал асинхронный подход выполнения задачи, но с блокирующей функцией. Это подход курильщика.
Как выглядит получение данных у здорового человека?
Кто отвечает за вызов коллбэка, после выполнения второй задачи?

Herman
09.10.2018
10:47:32

Пидорас
09.10.2018
10:47:33

Anton
09.10.2018
10:48:05

Пидорас
09.10.2018
10:48:14

Herman
09.10.2018
10:48:41
На одном запросе разницы между одним воркером fpm и одним процессом nodejs вообще не будет.

Google

Пидорас
09.10.2018
10:48:41

Bohdan
09.10.2018
10:49:32
асинхронность - это про блокирующие и неблокирующие процессы

Shmaltorhbooks
09.10.2018
10:49:46

Пидорас
09.10.2018
10:50:05

Herman
09.10.2018
10:50:54
Последовательно и асинхронно это как сравнивать теплое с мягким
В nodejs код выполняется последовательно и асинхронно, например.

Anton
09.10.2018
10:51:20
Пидорас вопрос. Что ты знаешь о архитектуре компьютера? О процессоре, о его прерываниях, о переферийных устройствах?

Пидорас
09.10.2018
10:51:51

Herman
09.10.2018
10:52:13

Пидорас
09.10.2018
10:52:27

Bohdan
09.10.2018
10:53:08
идешь в РО учиться общаться с людьми

Shmaltorhbooks
09.10.2018
10:53:14
Нормально же общались

Herman
09.10.2018
10:53:21
Жесть

Anton
09.10.2018
10:53:23
Знаю. А к чему этот вопрос?
к тому, что зная такие вещи. ты понимаешь смысл работы операций ввода-вывода.
Поэтому читай книги и статьи об этом.
https://docs.microsoft.com/en-gb/windows/desktop/FileIO/synchronous-and-asynchronous-i-o
и да ему нужен РО

Yury
09.10.2018
10:53:29
Го бан его

Bohdan
09.10.2018
10:53:51
РО до пятницы

Anton
09.10.2018
10:54:34
скорее всего он уже получил такие же РО в других чатах
ибо очень страннго с такими вопросами заходить в чат по Software Design