#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. как соотносится место ее компиляции? Это либо создает несколько потоков, либо нет. Где / как она была скомпилирована, на это не влияет.