sbcl-win32-1.0.40 альфа-версия
Sep. 16th, 2010 10:07 pmВыложил для тестирования бинарную сборку SBCL с нитями в https://sites.google.com/site/dmitryvksite/sbcl-distr/sbcl-1.0.40-threads-2.msi. Если есть возможность прогнать тесты (два основных теста, которые я использовал при отладке я выложил в http://gist.github.com/582848) и отписаться о результатах, было бы здорово.
no subject
Date: 2010-09-16 08:31 pm (UTC)Второй тоже запускал, но не долго.
no subject
Date: 2010-09-17 02:23 am (UTC)no subject
Date: 2010-09-16 08:50 pm (UTC)P.S. По итогам разбирательств с STD* - достаточно укокошить STD_INPUT_HANDLE; а вот сдублировать его и заменить на дубль недостаточно (как и ожидалось: на моей памяти ни одна из хэндло-висельных проблем дупликацией не лечилась).
no subject
Date: 2010-09-17 02:19 am (UTC)no subject
Date: 2010-09-17 03:33 am (UTC)no subject
Date: 2010-09-17 03:37 am (UTC)no subject
Date: 2010-09-18 10:26 am (UTC)no subject
Date: 2010-09-18 01:22 pm (UTC)Давайте попробуем изолировать проблему в USOCKET.
(usocket:with-socket-listener (sv "0.0.0.0" 8024) (usocket:wait-for-input sv :ready-only t :timeout 3600) (usocket:socket-accept sv))Этот код должен висеть в ожидании, а при подключении [напр. telnet localhost 8024] сразу вернуть работающий stream. Пожалуйста, расскажите, как у вас.
(Кстати, следите за тем, чтобы использовать незанятый порт -- а то с обработкой ошибок winsock в sbcl бывает невесело).
no subject
Date: 2010-09-18 01:52 pm (UTC)В общем, я hunchentoot запускаю на своей сборке где-то недельной давности (+OVERLAPPED, но влиять в данном случае не должно). Как я вижу, после этого вы уже коммитили; если в случае с hunchentoot речь идёт специфически о регрессии последних нескольких дней, предупредите (буду тогда сначала пересобирать, а потом уже думать :)
no subject
Date: 2010-09-19 03:58 am (UTC)Я не думаю, что речь идет о регрессии, но думаю, что это как-то связано с OVERLAPPED IO. Проверяю на своей последней версии (Add workaround for LoadLibrary hang in REPL (http://github.com/dmitryvk/sbcl-win32-threads/commit/64eeabc90fee571c9cb8dafaebdf0238b925b269)) из консоли и из REPL'а.
no subject
Date: 2010-09-19 06:44 am (UTC)no subject
Date: 2010-09-19 11:20 am (UTC)OVERLAPPED влиять не должен (или, если должен, то только в хорошую сторону). SBCL-ный виндовый unix-fast-select в принципе не может работать, когда ждать приходится на несокетах и сокетах разом. Я не очень понимаю устройство SBCL около sub-serve-event, with-fd-handlers и их друзей, но если ханчентут использует эту часть SBCL для мультиплексирования REPL и обработки сокетов -- проблемы гарантированы.
Реализация wait-for-input, которую я сейчас вижу в USOCKET, сделана правильно (WSAEventSelect -- внимание, для акцептов там отдельный флаг -- и ожидание на event'е). В перспективе в SBCL надо бы сделать аналогично, чтобы event loop с fd-handlers можно было бы пользоваться под виндой.
no subject
Date: 2010-09-19 05:11 pm (UTC)no subject
Date: 2010-09-19 11:32 am (UTC)no subject
Date: 2010-09-16 09:44 pm (UTC)Второй тест и через able, и через консоль печатает точки.
no subject
Date: 2010-09-17 02:22 am (UTC)no subject
Date: 2010-09-17 03:06 am (UTC)проц - Intel Core i3 (Arrandale-3M (http://en.wikipedia.org/wiki/Arrandale_%28microprocessor%29))
no subject
Date: 2010-09-17 04:42 pm (UTC)no subject
Date: 2010-09-17 05:14 pm (UTC)no subject
Date: 2010-09-17 09:43 am (UTC)no subject
Date: 2010-09-17 09:48 am (UTC)no subject
Date: 2010-09-18 01:15 pm (UTC)test-thread-3.lisp: после часа работы выводит плюсы, A, B, C, как и должно быть. Общая загрузка лиспом процессора 20-24% равномерно по ядрам.
threads3.lisp: десять минут выводит точки, как и должно быть. Общая загрузка лиспом процессора 50-60%. После этого точки выводить перестаёт, и у одного ядра загрузка 100%, остальные не загружены.
Федотов Валерий (laser123 в jabber).
no subject
Date: 2010-09-19 12:11 pm (UTC)Real Processor: Core 2 Quad 6600 2.4Гц
Real Memory: 4Гб
C:\sbcl-tests\> sbcl
* (load "test-thread-3.lisp")
Вывело строчек 15 +ABC в перемешку. Задумалось.
Я уж думалось - висит, хотел скопировать и скопипастить сюда.
Потом тест возобновился и успешно работал ~4часа.
no subject
Date: 2010-09-19 01:27 pm (UTC)no subject
Date: 2010-09-21 09:40 pm (UTC)Обнаружилось прискорбное: overlapped anonymous pipes в этой стране не дают (смотрел в эту сторону не только для прерывабельности, но и для того, чтобы изобразить unix_select() в перспективе). Таким образом, ввод/вывод по пайпам сейчас не прерывается (в остальном работает; откат на непрерывабельный non-overlapped я допускаю для всего). Старинный способ с WaitForSingleObject непосредственно на файловом дескрипторе ожидать ввода на anonymous pipe тоже не умеет :(
Вопрос: вы на какую платформу целитесь в качестве минимальной? [есть впечатление, что «недовинды» 9x/ME уже выпали, но проверить негде]. Не помню про CreateWaitableTimer, когда он появился -- вроде в 2k или раньше -- а делать на нём прерываемый Sleep было бы удобно. И ещё я буду исследовать возможности для имитации anonymous pipe через named, чтобы на них overlapped включать ("родные" anonymous pipe тоже, говорят, сделаны через named, так что это меньший изврат, чем кажется) -- там тоже системно-зависящие вещи могут всплыть; впрочем, если всё ниже win2k неинтересно, я могу смело использовать любой API, который помню :)
no subject
Date: 2010-09-22 05:16 am (UTC)А как waitable timer может помочь в данном случае?
no subject
Date: 2010-09-22 12:29 pm (UTC)no subject
Date: 2010-09-22 12:33 pm (UTC)no subject
Date: 2010-09-22 12:53 pm (UTC)no subject
Date: 2010-09-22 12:59 pm (UTC)