Как принудительно запустить программу gRPC cpp, используя только один поток

#c #multithreading #g #grpc #sgx

#c #многопоточность #g #grpc #sgx

Вопрос:

Мне нужно запустить мое клиентское приложение (написанное на c с использованием gRPC) в операционной системе (которая поддерживает только один поток). Однако я заметил, что grpc::InsecureChannelCredentials(); пытается создать несколько потоков. Вот выходные данные отладчика после вызова этой функции gRPC на моем хост-компьютере:

 [New Thread 0x7ffff524a700 (LWP 3709)]
[New Thread 0x7ffff524a700 (LWP 3710)]
[New Thread 0x7ffff524a700 (LWP 3711)]
  

Это приведет к сбою программы внутри однопоточной ОС.

Мой вопрос таков: есть ли способ настроить gPRC, используя только один поток, или заставить исполняемый файл cpp запускаться только с одним потоком? Заранее спасибо.

кстати, вот ссылка на ОС, упомянутую выше, и проблема объясняет, почему она поддерживает только один поток. https://github.com/lsds/sgx-lkl/issues/1

РЕДАКТИРОВАТЬ: На самом деле это не позволяет использовать многопроцессорное приложение вместо многопоточного. gRPC, похоже, выполняет fork внутри своей основной библиотеки. Мне интересно, есть ли способ настроить gRPC для отключения разветвления процесса.

Комментарии:

1. Если ОС поддерживает только однопоточные приложения, как приложению удается создавать несколько потоков? Это кажется довольно хитрым. Можно подумать, что ОС поддерживает несколько потоков, поскольку позволяет приложению создавать их… Что-то в вашем вопросе не сходится.

2. Исполняемый файл скомпилирован с -pie флагом с моего хост-компьютера, и я пытаюсь заставить исполняемый файл, работающий внутри ОС, работать в контейнере. На моем хост-компьютере работает ubuntu, и программа не вызывает никаких проблем. Но это приведет к сбою при запуске в контейнере.

3. Насколько это -pie актуально? Это не имеет ничего общего с количеством потоков. Это влияет только на расположение вашего адресного пространства и на то, является ли ваше приложение динамически перемещаемым или нет.

4. Я знаю. Я хочу сказать, что причина, по которой приложение создает несколько потоков внутри этой ОС, заключается в том, что я изначально скомпилировал его на своем хост-компьютере.

5. как соотносится место ее компиляции? Это либо создает несколько потоков, либо нет. Где / как она была скомпилирована, на это не влияет.