Межпроцессная сигнализация: Семафоры POSIX / Общая память против TCP-сокета
Я делаю приложение, где оно должно взаимодействовать с другим процессом на том же компьютере. Мне нужно сообщить об ошибке от процесса корневого уровня процессу UI. Для этого я использую семафор. Процесс на уровне ядра выполняется в цикле и при ошибке блокирует семафор и записывает тип ошибки в сегмент общей памяти. В то время как процесс пользовательского интерфейса отслеживает семафор в цикле, если он обнаруживает, что семафор заблокирован, он уведомит пользователя об ошибке с типом ошибки в сегменте разделяемой памяти.
//err_sem= named semaphore
P1_root_lvl()
{
while(1)
{
//Do Work
if(error_type1)
{
err_flag=true;
sem_trywait(&err_sem);
shared_mem=type1;
}
else if(error_type2)
{
err_flag=true;
sem_trywait(&err_sem);
shared_mem=type2;
}
else if(ok_state==true && err_flag==true)
{
sem_post(&err_sem);
err_flag=false;
}
}
}
P2_UI()
{
long sleep_time=10000
while(1)
{
sem_getvalue(&err_sem,ok)
if(ok==1)
{
//All OK
}
else if(ok==0)
{
err_type=shared_mem;
}
usleep(sleep_time);
}
}
P1 работает с высоким приоритетом. У меня есть много других модулей, работающих в системе одновременно.
- Какая разница в производительности при увеличении / уменьшении
sleep_time
? - Какая разница в производительности, если я использую сокеты для сигнализации процесса пользовательского интерфейса (P1 в качестве клиента и P2 в качестве сервера)?
- Что еще я могу сделать, чтобы оптимизировать этот механизм, который я использую?