Асинхронный по сравнению с Многопоточностью - там различие?

GNU grep:

grep -zoP 'new o.*?(\n|$)(?!y\()'

или это:

grep -zoP 'new o.*?;(?!\ny\()'

GNU awk:

$ awk -v RS="\n*y[^)]*);\n*" -F"\n" 'NF>1{for(i=1;i<NF;i++) print $i}' file
new o86 = x(-1.3);
new o88 = x(-1.3);
new o89 = x(-1.3);
new o91 = x(-1.3);
new o92 = x(-1.3);
new o93 = x(-1.3);
new o94 = x(-1.3);
new o95 = x(-1.3);
new o97 = x(-1.3);
new o98 = x(-1.3);

Для окон возврата каретки Windows (\r\n) конечные файлы :

awk -v RS="[\r\n]*y[^)]*);[\r\n]*" -F"[\r\n]+" 'NF>1{for(i=1;i<NF;i++) print $i}'
129
задан Ajedi32 23 February 2015 в 21:07
поделиться

9 ответов

Этим вопросом является штопка, почти слишком общая для ответа.

В общем случае асинхронный вызов не обязательно создает новый поток. Это - один способ реализовать его с существующим ранее пулом потоков или внешним процессом, являющимся другими путями. Это зависит в большой степени от языка, объектная модель (если таковые имеются), и среда выполнения.

Асинхронный просто означает, что вызывающий поток не сидит и ждет ответа, и при этом асинхронного действия не происходит в вызывающем потоке.

Кроме того, Вы испытываете необходимость для получения более конкретными.

80
ответ дан 24 November 2019 в 00:31
поделиться

Windows всегда имел асинхронную обработку с не приоритетных времен (версии 2.13, 3.0, 3.1, и т.д.) использование цикла сообщения, путь прежде, чем поддерживать реальные потоки. Таким образом для ответа на вопрос, нет, не необходимо создать поток для выполнения асинхронной обработки.

11
ответ дан 24 November 2019 в 00:31
поделиться

JavaScript является однопоточным и асинхронным. При использовании XmlHttpRequest, например, Вы предоставляете ему функцию обратного вызова, которая будет выполняться асинхронно, когда ответ возвратится.

у John Resig есть хорошее объяснение связанной проблемы того, как таймеры работают в JavaScript.

11
ответ дан 24 November 2019 в 00:31
поделиться

Каждый раз, когда операция, которая должна произойти асинхронно, не требует, чтобы ЦП сделал работу, та операция может быть сделана, не порождая другой поток. Например, если асинхронная операция является вводом-выводом, ЦП не должен ожидать ввода-вывода для завершения. Это просто должно запустить операцию и может тогда идти дальше к другой работе, в то время как аппаратные средства ввода-вывода (дисковый контроллер, сетевой интерфейс, и т.д.) делают работу ввода-вывода. Аппаратные средства сообщают ЦП, когда это закончено путем прерывания ЦП, и ОС тогда поставляет событие приложению.

Часто высокоуровневые абстракции и API не представляют базовый асинхронный API, доступный от ОС и используемого оборудования. В тех случаях обычно легче создать потоки, чтобы сделать асинхронные операции, даже если порожденный поток просто ожидает на операции ввода-вывода.

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

98
ответ дан 24 November 2019 в 00:31
поделиться

Некоторые системы позволяют Вам использовать в своих интересах параллелизм в ядре для некоторых средств с помощью обратных вызовов. Для довольно неясного экземпляра асинхронные обратные вызовы IO использовались для реализации не блокирующегося Интернета, разъединяет назад в неприоритетные многозадачные дни Системы Mac 6-8.

Таким образом, у Вас есть параллельные потоки выполнения "в" Вас программа без потоков как таковых.

7
ответ дан 24 November 2019 в 00:31
поделиться

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

Существуют примеры однопоточных асинхронных программ. Что-то как:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results
4
ответ дан 24 November 2019 в 00:31
поделиться

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

Иногда, в зависимости от ситуации, можно хотеть вызвать асинхронный метод, но заставить его, казаться пользователю быть быть синхронным (т.е. блок, пока асинхронный метод не сигнализировал, что это завершено). Это может быть достигнуто через API Win32, такие как WaitForSingleObject.

2
ответ дан 24 November 2019 в 00:31
поделиться

Асинхронные вызовы не должны даже происходить в той же системе/устройстве как та, вызывающая вызов. Таким образом, если вопрос, делает асинхронный вызов, требуют потока в текущем процессе, ответ нет. Однако должен быть поток выполнения, где-нибудь обрабатывающего асинхронный запрос.

Поток выполнения является неопределенным термином. В совместном управлении задачами системы, такие как ранний Macintosh и Windows OS'es, поток выполнения мог просто быть тем же процессом, который выполнил запрос, выполняющий другой стек, указатель команд, и т.д. Однако, когда люди обычно говорят об асинхронных вызовах, они обычно средние вызовы, которые обрабатываются другим потоком, если это - внутрипроцесс (т.е. в рамках того же процесса) или другим процессом, если это является межпроцессным.

Примечание, что межпроцессный (или межпроцессный) коммуникация (IPC) обычно обобщается для включения коммуникации внутрипроцесса, начиная с методов для блокировки и синхронизации данных, обычно является тем же независимо от какой процесс отдельные потоки выполнения, выполненного в.

8
ответ дан 24 November 2019 в 00:31
поделиться

Нет, асинхронные вызовы не всегда задействуют потоки.

Обычно они запускают какую-то операцию, которая продолжается параллельно с вызывающим. Но эта операция может выполняться другим процессом, ОС, другим оборудованием (например, контроллером диска), другим компьютером в сети или человеком. Потоки - не единственный способ выполнять задачи параллельно.

17
ответ дан 24 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: