Spec-Zone.ru › Elisp

Потоки

Emacs Lisp предоставляет ограниченную форму параллельности, называемую потоками. Все потоки в данном экземпляре Emacs используют общую память. Параллельность в Emacs Lisp «в основном кооперативная», что означает, что Emacs будет переключать выполнение между потоками только в определённые моменты. Однако поддержка потоков Emacs спроектирована таким образом, чтобы в будущем позволить более тонкую параллельность, и правильные программы не должны полагаться на кооперативное управление потоками.

В настоящее время переключение потоков произойдёт по явному запросу через thread-yield, при ожидании ввода с клавиатуры или вывода процесса из асинхронных процессов (например, во время accept-process-output), или во время блокирующих операций, относящихся к потокам, таких как блокировка мьютекса или thread-join.

Emacs Lisp предоставляет примитивы для создания и управления потоками, а также для создания и управления мьютексами и условными переменными, полезными для синхронизации потоков.

Хотя глобальные переменные разделяются между всеми потоками Emacs Lisp, локальные переменные — нет; динамическое let связывание локально. Каждый поток также имеет свой текущий буфер (см. Текущий буфер) и свои собственные данные соответствия (см. Данные соответствия).

Обратите внимание, что let связывания обрабатываются реализацией Emacs Lisp особым образом. Нет способа дублировать это поведение размотки и перемотки, кроме как с помощью let. Например, ручная реализация let, написанная с помощью unwind-protect, не может организовать, чтобы значения переменных были специфичны для потока.

В случае лексических связываний (см. Ограничение области действия переменных), замыкание — это объект, подобный любому другому в Emacs Lisp, а связи в замыкании разделяются любыми потоками, вызывающими замыкание.

border="0" cellspacing="0" class="menu">
• Основные функции потоковОсновные функции потоков.
• МьютексыМьютексы обеспечивают исключительный доступ к данным.
• Условные переменныеМежпотоковые события.
• Список потоковПоказать активные потоки.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Threads.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API