Re[6]: ревью multi-queue processor
От: VVV Россия  
Дата: 12.09.19 21:35
Оценка:
Здравствуйте, Hydrophobia, Вы писали:

H>подозреваю что любой IPC метод подойдет (очередь сообщений, пайпы, файлы, сокеты, нотификации, пр).


Да, это вот всё подойдёт!!

Но, для теста на собеседовании уже привёл псевдокод в первом реплае:
псевдокод (просто идея, без обработки ошибок)
Subscribe(key, consumer)
{
 queue=findQ(key)
 while(true)
 {
   WaitFSObject(queue->hasData,INFINITE)
   if(queue->unsubscribed) return;
   while(true)
   {
     if(queue->unsubscribed) return;
     Data d=queue->GetData();
     if(d != NULL) consumer->Consume(key, Data);
     else break;
   }
 } 
}


consumer->Consume() может вызвать Unsubscribe, который установит queue->unsubscribed=true и SetEvent(hasData)


Просьба воспринимать это всего лишь как идею и 'псевдокод'.
Re: ревью multi-queue processor
От: TimurSPB Интернет  
Дата: 12.09.19 22:20
Оценка:
H>[i]Необходимо сделать универсальный (библиотечный) обработчик нескольких очередей, позволяющий:
Я бы делал на основе https://www.boost.org/doc/libs/1_71_0/doc/html/boost/lockfree/queue.html
И тестов побольше, чтобы хоть примерно оценить масштабируемость, производительность и вот это вот всё.
Make flame.politics Great Again!
Re[7]: ревью multi-queue processor
От: Hydrophobia  
Дата: 13.09.19 07:37
Оценка:
Здравствуйте, VVV, Вы писали:


K>>>А как будет выглядеть вызов из потока консьюмера?


H>>подозреваю что любой IPC метод подойдет (очередь сообщений, пайпы, файлы, сокеты, нотификации, пр).


VVV>О! Ты не так прост!! Начальный топик был троллинг что ли???


Нет, мне действительно было интересно узнать, что я делаю не так. Вероятно, я неправильно понял задание — люблю все усложнять.
Re: ревью multi-queue processor
От: Molchalnik  
Дата: 23.11.19 21:25
Оценка:
Здравствуйте, Hydrophobia, Вы писали:

H>Доброго времени суток!


H>Решил тут попробывать себя в одну кипрскую контору, дали мне задание:

Это те, которые на лимасол набирают, что ли? так они платят мало, вроде не больше 3000 евро, за эти деньги в европе ты будешь на консервированной кильке в томате сидеть, и то, тебе её будут коллеги из россии присылать из жалости. В европе жизнь очень дорогая, поэтому сравнение зарплат по голым цифрам некорректно.

по коду: 1) тебе чётко в задании намекнули, что надо использовать read-write locker

не знаю, есть ли он в буст (вероятно есть), но точно есть в pthread

2) не использовать sleep, использовать conditional variable
3) сделай на каждый поток свой аллокатор, или подумай, как заменить динамическое выделение статическим
4) свой булевый флаг running сделай atomic

когда ты выделяешь память, система становится однопоточной.
Отредактировано 23.11.2019 21:49 Molchalnik . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.