При изучении "языка ассемблера" (в Linux на архитектуре x86 с использованием GNU в качестве ассемблера) одним из моментов aha была возможность использовать систему звонки. Эти системные вызовы очень удобны и иногда даже необходимы, поскольку ваша программа работает в пространстве пользователя.
Однако системные вызовы довольно дороги с точки зрения производительности, так как они требуют прерывания (и, конечно же, системного вызова), что означает, что контекстный переключатель должен быть сделан из вашей текущей активной программы в пространстве пользователя в систему, запущенную в пространстве ядра.
То, что я хочу сделать, это следующее: я в настоящее время реализую компилятор (для университетского проекта), и одна из дополнительных функций, которые я хотел добавить, - это поддержка многопоточного кода, чтобы повысить производительность скомпилированную программу. Поскольку часть многопоточного кода будет автоматически сгенерирована самим компилятором, это почти гарантирует, что в нем будут действительно крошечные биты многопоточного кода. Чтобы получить выигрыш в производительности, я должен быть уверен, что использование потоков сделает это.
Однако мой страх заключается в том, что для того, чтобы использовать потоки, я должен сделать системные вызовы и необходимые прерывания. Таким образом, крошечные маленькие (автоматически сгенерированные) потоки будут сильно затронуты временем, затрачиваемым на эти системные вызовы, что может даже привести к потере производительности...
мой вопрос поэтому двоякий (с дополнительным бонусным вопросом под ним):
- Можно ли написать ассемблер код, который может запускать несколько потоков одновременно на нескольких ядрах один раз, без потребности в системе вызовы?
- Получаю ли я прирост производительности, если у меня есть действительно крошечные потоки (такие же крошечные, как в общем времени выполнения потока), потеря производительности или вообще не стоит усилий?
Я предполагаю, что многопоточный ассемблерный код невозможен без системных вызовов. Даже если это так, есть ли у вас предложение (или даже лучше: какой-то реальный код) для эффективного внедрения потоков?