Home

Thu, Mar. 27th, 2008, 12:34 am
Слухи о моей смерти оказались сильно преувеличены

Совершенно случайно узнал, что у российской почты есть тракинг посылок.

Немедленно вбил туда идентификатор посылки, которую я жду примерно месяц. Выяснилось, что посылка отправлена назад. Причина возврата - "смерть адресата".

Мда...

Tue, Sep. 4th, 2007, 05:52 am
Про уних

В UNIX'е, как выяснилось, нет стандартного механизма синхронизации между процессом и signal handler'ом, который работал бы в многопоточной программе. Блокирование сигнала не годится - sigprocmask блокирует сигнал только текущему потоку. А всякими там мутексами и семафорами по стандарту из signal handler'а пользоваться нельзя.

Пришлось делать самодельный spin lock...

Tue, Sep. 4th, 2007, 05:46 am
pipe() vs socketpair()

Что быстрее, pipe() или socketpair( AF_UNIX, SOCK_STREAM, ... )?

Казалось бы, должно быть одного порядка. Ан нет, pipe() занимает где-то 5 микросекунд, socketpair() - 10. Linux 2.6.x

Tue, Sep. 4th, 2007, 05:35 am
И как под это программировать?

Если в Винде поток запускает Overlapped I/O и завершается, не дождавшись окончания, I/O запрос обрывается со статусом ERROR_OPERATION_ABORTED.

Что любопытно - приаттачить файл к Completion Port не помогает. Запрос все равно привязан к потоку, и помирает вместе с потоком.

И как предлагается программировать под эту систему?

P.S. В Висте они таки додумались делать Overlapped I/O, не привязанный к потоку. 15-и лет не прошло...

Tue, Sep. 4th, 2007, 05:26 am
Бенчмаркология

Пишем програмку, состояющую из 2-х потоков. Один пишет в TCP-сокет, другой читает. Сокеты соединены между собой через 127.1

Запускаем на Линухе - получаем 363 мб/сек. На Винде - 54. Уже забавно.

Теперь увеличиваем буфер, которым пользуется програма, с 1 до 32 килобайт.

Линух разгоняется до 700 мегабайт. Винда - до 78.

Я фигею.