Начните с create-react-app
и имейте это как совершенно отдельную вещь. Таким образом, ваше приложение реагирования не знает и не заботится о том, что такое API - все, что его волнует, это конечные точки API.
Размер стека зависит от того, что делают Ваши потоки. Мой совет:
Между прочим, x86 размеры страницы обычно 4k, но они не должны быть. Можно пойти с 64k размером или еще больше. Обычная причина больших страниц состоит в том, чтобы избежать TLB промахи. Снова, я сделал бы это параметром конфигурации ядра или параметром периода выполнения.
Я добавлю свои два цента, чтобы сдвинуться с мертвой точки:
Я не уверен, каков "типичный" размер стека был бы. Я предположил бы, возможно, 8 КБ за поток, и если поток превышает эту сумму, просто выдайте исключение. Однако согласно этому, Windows имеет значение по умолчанию зарезервированный размер стека 1 МБ за поток, но это не фиксируется внезапно (страницы фиксируются, поскольку они необходимы). Кроме того, можно запросить другой размер стека на данный EXE во время компиляции с директивой компилятора. Не уверенный, что Linux делает, но я видел ссылки на стеки на 4 КБ (хотя я думаю, что это может быть изменено, когда Вы компилируете ядро, и я не уверен, что размер стека по умолчанию...),
Это соединяется с первой точкой. Вы, вероятно, хотите фиксированный предел на то, сколько стека каждый поток может добраться. Таким образом Вы, вероятно, не хотите автоматически выделять больше стекового пространства каждый раз, когда поток превышает свое текущее стековое пространство, потому что ошибочная программа, которая застревает в бесконечной рекурсии, собирается съесть всю доступную память.
Почему бы не заставить стек измерить настраиваемый объект, или снабженный программой или указанный, когда процесс создает другой процесс?
Существует любое количество способов, которыми можно сделать это настраивающимся.
Существует инструкция, которая указывает "0, 1 или n", означая, что необходимо позволить нуль, один или любое число (ограниченный другими ограничениями, такими как память) объекта - это относится к размерам объектов также.
При использовании виртуальной памяти Вы действительно хотите сделать стек growable. Принуждение статического выделения измеренного стека, как распространено в уровне пользователя, распараллеливающем как Qthreads, и Windows Fibers является путаницей. Трудно использовать, легкий отказать. Все современные Ose действительно выращивают стек динамично, я обычно думаю при наличии защитной страницы защищенной от записи или два ниже текущего указателя вершины стека. Записи там затем говорят ОС, что стек ступил ниже своего выделенного места, и Вы выделяете новую защитную страницу ниже этого и делаете страницу, которая была поражена перезаписываемая. Пока никакая единственная функция не выделяет больше чем страницу данных, это хорошо работает. Или можно использовать две или четыре защитных страницы для разрешения больших стековых фреймов.
Если Вы хотите способ управлять размером стека, и Вашей целью является действительно управляемая и эффективная среда, но не заботьтесь о программировании в том же стиле как Linux и т.д., пойдите для однократной модели выполнения, где задача запускается каждый раз, когда соответствующее событие обнаруживается, работает к завершению и затем хранит любые персистентные данные в своей структуре данных задачи. Таким образом все потоки могут совместно использовать единственный стек. Используемый во многих тонких операционных системах реального времени для автомобильного управления и подобный.