параллелизм JavaScript

Ну, сначала я хочу сказать, что я являюсь немного новым в мире Интернета dev.

Так или иначе я пытаюсь знать если его возможное выполнять две части кода в параллели с помощью JavaScript.

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

Делает методы как setTimeout, выполненный одновременно, например

setTimeout(func1, 0);
setTimeout(func2, 0);

...

function func1()
{
   webMethod1(function() {alert("function 1 returned"); } );
}

function func1()
{
   webMethod2(function() {alert("function 2 returned"); } );
}

Отредактированный

Я только что нашел эту статью, которая может быть очень прохладной для realease следующих браузеров: веб-рабочие Javascript

5
задан Andres 22 January 2010 в 19:43
поделиться

5 ответов

unsafe
{
    char c = 'c';
    char *ch = &c;
}

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

В этом случае:

char c = 'c';
string s = c.ToString(); // or...
string s1 = "" +c;

Также доступно:

unsafe
{
    char c = 'c';
    char* ch = &c;
    string s1 = new string(ch);
    string s2 = new string(c, 0);
}
-121--4534683-

Как насчет:

var test = 'c'.ToString()
-121-4534692-

Существует один поток выполнения в Javascript в обычных веб-браузерах: будут вызываться обработчики таймера Ваш подход с использованием таймеров будет работать в случае, если вы представляете.

Существует приятная документация по таймерам Джона Ресига (автор очень популярной структуры jQuery javascript - если вы новичок в веб-разработке, я бы посоветовал вам посмотреть ее вверх).

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

7
ответ дан 14 December 2019 в 01:08
поделиться

Да, это именно то, как веб-запросы через AJAX работают. Нет необходимости Settimeout до 0, вы можете просто позвонить им один за другим и сделать запрос AJAX, и он будет выполнен асинхронно, что позволяет вам пройти функцию обратного вызова, когда запрос завершится, когда запрос завершится Отказ

Средства создания запроса AJAX отличаются некоторыми в зависимости от того, какой браузер запущен. Если вы собираетесь построить что-то, что значительно зависит от AJAX, и вы хотите, чтобы он работал в нескольких браузерах, вы лучше всего с библиотекой. Вот как это сделано в jQuery, например:

$.ajax({ url: '/webrequesturl', success: function(result) {
    // this will be called upon a successful request
} });
$.ajax({ url: '/webrequest2url', success: function(result) {
    // this will be called upon a successful request
    // this may or may not be called before the above one, depending on how long it takes for the requests to finish.
} });
2
ответ дан 14 December 2019 в 01:08
поделиться

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

Я бы порекомендовал вам посмотреть на следующую статью, она действительно объясняет, как работают таймеры и асинхронные события, это также поможет вам понять одноретичную природу JavaScript:

И как альтернатива, вы можете посмотреть на WebWorkers , - это способ запуска сценариев в отдельных фоновых нитях, но они поддерживаются только современными браузерами.

2
ответ дан 14 December 2019 в 01:08
поделиться

Мне очень понравился Грегори Пакош ' ответить . Тем не менее, что вы могли бы сделать, это песочницу самого экземпляра Java. Запустите само приложение Java в ограниченном контексте.

В Windows или Unix можно создать пользователя, который ограничен определенным каталогом и имеет доступ только к некоторым библиотекам DLL. Таким образом, DLL вызывается из JNI может делать все, что он хочет, но он не будет очень далеко, потому что пользователь Java работает, как не может сделать очень много.

Если вашей программе Java нужно делать привилегированные вещи, стороне Java придется поговорить с другой программой (Java или нет), чтобы сделать свои привилегированные вещи для нее.

Имейте в виду, что если вы не можете доверять DLL, вы также не можете доверять коду Java, так как DLL мог «взломать» машину Java. С другой стороны, никакие неприятные вещи не должны быть способны вырваться из пределов пользователя, как они работают. (Запрет неправильной конфигурации или ошибки в ОС.)

Изменить 2018: сегодня может быть более актуальным отметить, что песочница для запуска Java в, скорее всего, будет виртуальной машиной, в облаке amazon, докере или что у вас, в заблокированной конфигурации.

-121--3853813-

Пример кода, в котором это могло бы помочь:

public class SpecialDataRow<T> : T where T : DataRow
{
    public int SpecialFactor { get; set; }
}

Это позволило бы создавать «специальные» строки из DataRow, а также из любых производных DataRows (например, сформированных наборных наборов данных)

Я не вижу другого способа кодирования такого класса

-121--1154939-

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

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

Использование setTimeout может работать, так как это позволит запланировать вызов обеих функций отправки запросов. Однако некоторые браузеры одновременно запускают только один поток Javascript, поэтому в результате одна из запланированных функций будет запущена и заблокирована (ожидание ответа), а другая запланированная функция будет ждать, пока не будет запущена первая.

Рекомендуется использовать асинхронную поддержку из библиотеки связи сервера. Например, по умолчанию jQuery использует асинхронный режим.

0
ответ дан 14 December 2019 в 01:08
поделиться
unsafe
{
    char c = 'c';
    char *ch = &c;
}

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

В этом случае:

char c = 'c';
string s = c.ToString(); // or...
string s1 = "" +c;

Также доступно:

unsafe
{
    char c = 'c';
    char* ch = &c;
    string s1 = new string(ch);
    string s2 = new string(c, 0);
}
-121--4534683-

Как насчет:

var test = 'c'.ToString()
-121-4534692-

Это зависит от движка JavaScript.

-2
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

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