> сделать на питоне sleep без блокирации event loop довольно слоожно и код будет намного длиннее!
В tornado это IOLoop.add_timeout, в Twisted — reactor.callLater, в Haskell — Control.Concurrent.threadDelay, в Erlang — timer:sleep(), в gevent — gevent.sleep.
> И на данный момент я не видел решений которые предоставляли возможность писать неблокирующий скрипты легко и непренуждённо, как это делает Node.
Видимо плозо искали.
У вас в примере с Tornado вызов time.sleep блокирует весь event-loop, именно поэтому и получается такая красивая цифра ы 20 секунд = 10 соединений * 2 секунды задержки. То есть во время задержки другие соединения не обслуживаются. Учите мат. часть.
> обладающей довольно уникальной на сегодняшний день особенностью, неблокирующим I/O
Erlang (BEAM), Haskell (GHC), Python (Twisted, gevent, eventlet, concurrence), Ruby (EventMachine).
Программирование с коллбэками это же не удобно, не понимаю чего все нашли такого особенного в этом node.js, разве что на сервере на javascript писать. А так — это просто Twisted на javascript. Попробуйте лучше использовать что-нибудь с корутинами, типа Erlang, Haskell или Python (greenlet+gevent/concurrence/eventlet).
Хорошо, извиняюсь, не так понял — вы хотите угадывать не учитывая порядок, а просто по результирующему набору. Тогда нужно просто сложить, посчитанные выше, вероятности для эквивалентых выборок, например:
вероятность выпадения одной решки в трёх бросках = p(001) + p(010) + p(100) = 0.375
Я имею ввиду, что подбрасывание монеты подряд — попарно независимые эксперименты. Вероятность получить «орёл» в одном эксперименте — 0.5. В трёх подряд — 0.5*0.5*0.5 = 0.125.
Очень советую посмотреть на concurrence или gevent. Их event-loop целиком находится в Си (Libevent), и обе библиотеки предоставляют API синхронного стиля на базе корутин (используются greenlet).
Это стандартный API для Xen. qemu, KVM, virtualbox. Конфигурация каждой ВМ храниться в XML. Конфигурация сети тоже в XML. Для управления из командной строки — virsh. Есть биндинги ко многим языкам программирования. С помощью пакета virtinst легко клонировать машины (он сам даже генерирует MAC адреса для их сетевых интерфейсов и т.д.). Ну там много всяких удобностей.
В tornado это IOLoop.add_timeout, в Twisted — reactor.callLater, в Haskell — Control.Concurrent.threadDelay, в Erlang — timer:sleep(), в gevent — gevent.sleep.
> И на данный момент я не видел решений которые предоставляли возможность писать неблокирующий скрипты легко и непренуждённо, как это делает Node.
Видимо плозо искали.
Erlang (BEAM), Haskell (GHC), Python (Twisted, gevent, eventlet, concurrence), Ruby (EventMachine).
Программирование с коллбэками это же не удобно, не понимаю чего все нашли такого особенного в этом node.js, разве что на сервере на javascript писать. А так — это просто Twisted на javascript. Попробуйте лучше использовать что-нибудь с корутинами, типа Erlang, Haskell или Python (greenlet+gevent/concurrence/eventlet).
вероятность выпадения одной решки в трёх бросках = p(001) + p(010) + p(100) = 0.375
Thanks!