И, между прочим, в FreePascal есть инструкцияя asm, которой не так уж и сложно пользоваться. И результат вполне кроссплатформенен (используется особый диалект ASM).
Сколько займет парсинг я считать не буду =) Текстовый протокол вскоре будет заменен на бинарный. А прием/отправка реализованы сейчас почти напрямую через сокеты ОС.
Ключ может содержать в себе любые символы, в том числе и \r\n. Точно также и значение.
Зачем нужны кеширующие серверы можно почитать здесь: ru.wikipedia.org/wiki/Memcached
Я имею ввиду, что помимо операции присвоения значения по ключу, нужна еще операция добавления к значению. Она должна выглядеть как атомарная для сервера.
Вот про то что не войдет — это плохо. Представь сервер кеша на посещаемом сайте. Сонти запросов в секунду для популярных ключей. Все потоки должны иметь возможность читать одновременно данные.
Проблема с APPEND/INC актуальна так же и для хештаблицы. Лочить надо. Я выбрал пока бинарное дерево для хэштаблицы (минимум памяти при приемлемой скорости). Непонятно что лочить при удалении, например. В бинарном дереве удаление не очень-то и простая команда.
Прочитал mutex, там 0, пишущий поток решил что ему можно писать) Сразу после того как первый прочитал, второй поток тоже прочитал 0, тоже решил что ему можно писать. Оба стали писать, поставив единичку)
А так, не только в этом проблема. Непонятно что лочить при удалении, например. В бинарном дереве удаление не очень-то и простая команда.
HTTP избыточен, его разбор займет время. А тут важна скорость.
Каждый поток имеет свою очередь сообщений и может корректно выключиться как только его попросит менеджер потоков.
То есть тут какая штука. Либо создавать огромную таблицу, тратить память на нее и иметь мало колизий, либо мелкую таблицу, скорость которой в итоге может быть меньше бинарного дерева.
Такая таблица очень маленькая на мой взгляд, будет много колизий и оттуда много цепочек. При 10млн элементов максимальная глубина дерева была 52, md5 очень крутой.
Зачем нужны кеширующие серверы можно почитать здесь: ru.wikipedia.org/wiki/Memcached
А так, не только в этом проблема. Непонятно что лочить при удалении, например. В бинарном дереве удаление не очень-то и простая команда.
Каждый поток имеет свою очередь сообщений и может корректно выключиться как только его попросит менеджер потоков.