Виртуальная память

В отличие от python, API JavaScript все асинхронные. Когда вы звоните get(), он немедленно возвращается с обещанием, которое разрешается, когда работа завершена. then() также возвращает обещание, как и catch(). Вы возвращаете name прежде, чем он когда-либо получит значение от обратного вызова, что происходит через некоторое время.

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

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

5
задан LeopardSkinPillBoxHat 4 February 2009 в 08:55
поделиться

5 ответов

Ну, понятие довольно просто на самом деле. Я не повторю его здесь, но необходимо забрать любую книгу по дизайну ОС, и это будет объяснено там. Я рекомендую "Понятия Операционной системы" от Silberscahtz и Galvin - это - то, что я должен был использовать в Университете, и это хорошо.

Несколько вещей, что я могу думать о том, что знание Виртуальной памяти могло бы дать Вам:

  • Обучение выделить память на границах страницы для предотвращения отходов (применяется только к виртуальной памяти, не обычной "куче"/стековой памяти);
  • Заблокируйте некоторые страницы в RAM, таким образом, они не становятся подкачанными к жесткому диску;
  • Страницы опекуна;
  • Резервирование некоторого диапазона адресов и фиксация фактической памяти позже;
  • Возможно, использование NX (неисполняемый файл) укусило для увеличения безопасности, но я не уверен в этом.
  • PAE для доступа> 4 ГБ в 32-разрядной системе.

Однако, все эти вещи имели бы использование только в довольно определенных сценариях. Действительно, 99% приложений не должны интересоваться об этом.

Добавленный: Тем не менее определенно хорошо знать все эти вещи, так, чтобы можно было определить такие сценарии, когда они возникают. Просто остерегайтесь - с питанием, прибывает ответственность.

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

Это - определенный неопределенный вопрос.

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

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

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

Главные преимущества использования отображаемых файлов:

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

Некоторые недостатки:

  • 32-разрядные машины могут исчерпать адресное пространство легко
  • Хитрый для обработки файла, расширяющегося правильно
  • Никакой простой способ видеть, сколько / какие страницы являются в настоящее время резидентным объектом (могут быть некоторые пути однако),
  • Не хороший для приложений реального времени, поскольку отсутствие страницы может вызвать запрос IO, который блокирует поток (файл может быть заблокирован в памяти однако, но только если существует достаточно).
2
ответ дан 14 December 2019 в 01:19
поделиться

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

Я знаю об одной статье, которая говорит об управлении памятью компьютера с акцентом на Linux [http://lwn.net/Articles/250967].Надеюсь, это поможет.

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

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

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

И я думал бы, что статья Wikipedia может быть хорошим началом.

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

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

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

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

Например, если Вы объявляете матрицу в C (int a[rows][cols]), это выделяется строками. Таким образом при сканировании матрицы, необходимо просканировать строками, а не столбцами. Иначе Вы будете подкачкой страниц те же данные в и много раз.

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

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

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