Создание многопоточной очереди заданий (потребитель/производитель) в C++

Вы могли бы хотеть рассмотреть, насколько УСПОКОИТЕЛЬНЫЙ это?

т.е. видят, "Передают statelessly" абзац в" Введение Резюме А в REST"...

"мандаты REST, которые указывают быть или превращенными в состояние ресурса или сохраненными клиент. Другими словами, серверу не придется сохранить своего рода состояние связи ни для одного из клиентов, которыми это общается с вне единственного запроса".

(или какая-либо из других ссылок на Википедию для REST)

Так в Вашем случае, 'wave_id' является разумный Ресурс для ПОЛУЧЕНИЯ, но сделать Вас действительно хотят сохранить его на СЕССИИ? Конечно memcached является Вашим решением cacheing объектный Ресурс?

7
задан 1 December 2009 в 13:36
поделиться

6 ответов

Я думаю, что message_queue из boost :: interprocess - это то, что вам нужно. Вторая ссылка содержит пример использования.

0
ответ дан 7 December 2019 в 07:46
поделиться

Вам следует взглянуть на ACE (адаптивная коммуникационная среда) и ACE_Message_Queue. Всегда есть message_queue boost, но ACE - это то, где он находится с точки зрения высокопроизводительного параллелизма.

0
ответ дан 7 December 2019 в 07:46
поделиться

Если вы реализуете это самостоятельно, реализация должна быть довольно простой комбинацией семафора, мьютекса и объекта очереди.

Вот некоторый псевдокод:

Produce{
    pthread_mutex_lock(&mutex);
    queue.push_back(someObjectReference);
    pthread_mutex_unlock(&mutex);
    sem_post(&availabilitySem);
}

Consume{
    sem_wait(&availabilitySem);
    pthread_mutex_lock(&mutex);
    queue.pop_front(someObjectReference);
    pthread_mutext_unlock(&mutex);
}
4
ответ дан 7 December 2019 в 07:46
поделиться

ОБНОВЛЕНИЕ 2016: Оказалось, что это ошибка Python по крайней мере с 2013 года, очень вероятно и раньше, заключающаяся в том, что Python плохо реагирует на локали, отличные от GNU, например те, что есть в Mac OS X и BSD. Ошибка остается открытой по состоянию на сентябрь 2016 года и затрагивает все версии Python.


Если не была установлена ​​переменная среды LANG , скорее всего, у вас была либо LC_CTYPE (ключевая переменная), либо LC_ALL (которая имеет приоритет, если установлена) переменная среды установлена ​​на UTF-8 , что не является допустимой локалью OS X. Достаточно легко воспроизвести с помощью поставляемого Apple / usr / bin / python или с помощью специального питона, как в вашем случае, который был построен с 10.6 SDK (вероятно, также 10.5 SDK). Вы не сможете воспроизвести это таким образом на питоне. org python; в настоящее время они построены с использованием SDK 10.4, в котором API-интерфейсы локали ведут себя по-другому.

$ unset LANG
$ env | grep LC_
$ export LC_CTYPE="UTF-8"
$ /usr/bin/python  # Apple-supplied python
Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale
    return _parse_localename(localename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
^D
$ /usr/local/bin/python2.6   # python.org python
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
(None, 'mac-roman')
>>> 

РЕДАКТИРОВАТЬ:

Возможно, есть еще один фрагмент головоломки. Беглый взгляд на bzr 2.0.1, который я установил, показывает, что цитируемое вами сообщение должно отображаться только в том случае, если locale.getpreferredencoding () вызывает ошибку locale.Error ]. Это может произойти, если расширение python _locale.so C не может быть загружено, и это может произойти, если на нем есть проблемы с правами доступа. Например, в настоящее время известно, что MacPorts имеет проблемы с настройкой разрешений, если у вас настроена umask ; Я сам был обожжен этой проблемой. Проверьте права доступа для _locale.so в каталоге python lib / python2.5 / lib-dynload и убедитесь, что это 755 .

2
ответ дан 7 December 2019 в 07:46
поделиться

Если вы используете Windows и хотите, чтобы очередь была эффективной с точки зрения того, как она управляет потоками, которым разрешено запускать для обработки элементов из нее, тогда взгляните на порты завершения ввода-вывода (см. здесь ). Моя бесплатная серверная среда включает реализацию очереди задач, основанную на IOCP, и это также может быть интересно, если вы собираетесь пойти по этому пути; хотя, возможно, он слишком специализирован для того, что вам нужно.

1
ответ дан 7 December 2019 в 07:46
поделиться

Если вы используете OSX Snow Leopard, вы можете посмотреть Grand Central Dispatch .

0
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: