Да, вы можете вызывать любую функцию в вашей программе из любого контекста.Обратите внимание, что использование getcontext
и setcontext
не создает настоящих «потоков», и вы не получаете никакой параллельной обработки с этим - вы только получаете планирование.Вот почему это будет работать, независимо от того, является ли это пользовательским интерфейсом или нет.Это в основном просто goto, который работает кросс-функции.Чтобы процитировать manpage напрямую:
Если контекст был получен вызовом getcontext (), выполнение программы продолжается, как если бы этот вызов только что вернулся.
Это означает, что если я напишу
... code ...
getcontext(&cxt);
... code ...
setcontext(&cxt);
Затем, когда я достигну setcontext
, состояние, к которому я иду, будет идентичным тому, когда функция getcontext
только что вернулся.Нет заметной разницы (Конечно, вы могли изменить значения памяти в то же время, но это не относится к делу).Страница man имеет аналогичную гарантию с makecontext
, но с учетом того, что она будет перенаправлять вас после завершения выполнения данной функции.
Примеры, которые вы приводите, находятся на языках программирования более высокого уровня, которые имеют гораздо большесложность, и, следовательно, не так просто, как setcontext
/ getcontext
в C
.Похоже, что опубликованная вами ошибка Java на самом деле является отдельным потоком ОС, как и в третьем примере.Первый пример выглядит так, как будто это может быть фиктивный поток, но, конечно, есть скрытые сложности, которые могут препятствовать работе вызовов пользовательского интерфейса (так как они взаимодействуют с внешними API).
Вот почему многопоточность в JS так проста:темы не настоящиеЧто вы теряете в параллельной производительности, вы получаете возможность вызывать что угодно в любом месте из отправленных функций и вызовов ajax.
Если вы знаете, что ваша волоконно-оптическая библиотека действительно использует только getcontext
и setcontext
, тогда вы 'все будет хорошо.Библиотека может делать что-то еще, поэтому в такой ситуации было бы неплохо проверить с авторами библиотеки.