November 19, 2009

Как программировать скоростные сервера в Лиспе

17 Ноября я презентовал мои идеи о конструкции скоростных серверов в Лиспе Монреальской группе программистов Scheme и Лисп.

Идеи презентации исходят из моей экзаменации веб-серверов Antiweb и TPD2 (смотрим презентацию Джона Фремлина о TPD2 Шибуйским Лисперам здесь). Один недостаток обоих серверов - довольно наивный подход к конкуренции и синхронизации. Я решил конструировать новый веб-сервер на базе этих примеров и размышлений, HTTP DOHC (DOHC - Dual Overhead Camshaft, когда в двигателе автомобиля двое распределительных валов в головке цилиндров - имя выбрано из за связанной двойной системы демультиплексирования в сервере).

Планирую дальнейшее развитие HTTP DOHC в полноценный веб-сервер, с интерфейсом схожим с Hunchentoot 1.0.

Ещё хочу обратить внимание - освободилось личное время для коммерческих проектов. Пишите на vsedach@gmail.com если есть что интересное.

3 comments:

  1. А я то думаю, к чему эта активность в рассылке iolib :)

    Меня последние пару месяцев не покидает мысль сделать для hunchentoot новый acceptor и taskmaster на основе iolib и схемой обработки запросов в стиле nginx. После беглого просмотра кода мне показалось, что это можно сделать без переделки оригинального кода. Только всё времени на это нет.

    ReplyDelete
  2. Не понял одной вещи - почему есть пул акцепторов? Ведь акцептор привязывается к адресу и порту, слушает, и отдаёт соединения в потоки мультиплексирования. Как их может быть несколько?

    ReplyDelete
  3. Акцептор - это тот процесс, который вызывает accept() на сервер (passive) сокет (этот сокет и привязан к адресу и порту).

    Вот в том и фишка - все треды в пуле акцепторов сами отвечают на первый запрос, и только потом передают сокет в epoll пул на мултиплексирование. ТК accept() уже тред-safe (на винде и современных линуксах и бсд) получается что можно ответить на первый запрос без переключения контекста и даже без использование мьютекса.

    ReplyDelete

Hi there! Thanks for taking the time to comment on my blog. To avoid spam, all messages are personally reviewed by me prior to being posted - don't worry if your message does not show up right away.

Note: Only a member of this blog may post a comment.