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.
Я фигею. |