Как обстоят дела с проблемами NIO в Scala / Java? - PullRequest
6 голосов
/ 25 марта 2011

При поиске в Интернете параллелизма в jvm я нашел вопросы о поиске Неблокирующей библиотеки ввода-вывода для Scala / Java.

В чем проблема?Если я хочу отправить что-то в файл / сокет, я могу запустить отдельный поток, который выполняет задание.

Я знаю, что могут быть проблемы с использованием потоков, основанных на событиях, - потому что вся система может быть заблокирована.Но относится ли это к JVM / Scala?

ДОБАВЛЕНО :Пожалуйста, поправьте меня, если я ошибаюсь:Я думаю, что когда вам нужно вызвать какую-то функцию ввода-вывода асинхронным способом, она должна перейти в отдельный процесс или системный (тяжелый) поток.Я прав?Итак, все вопросы о решении такого рода вопросов на общих языках относятся к созданию и управлению отдельным процессом или потоками.Таким образом, единственным облегчением языка является создание некоторого пула потоков, которые будут назначены операциям ввода-вывода в асинхронном режиме.

Итак, мои гипотезы таковы.Предложение: Язык X лучше, чем Y, потому что вызов асинхронной операции ввода-вывода не блокирует виртуальную машину ложно, потому что в каждом языке, поддерживающем системные потоки, есть возможность управлять NIO, единственное отличие состоит в том, что язык Xимеет лучшую поддержку для этого благодаря встроенным библиотекам / языковым возможностям.

  1. Является ли эта гипотеза Истиной?
  2. Может ли какой-либо язык достичь NIO без поддержки системы os?(через процессы / потоки)

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Вот интересный недавний пост в блоге, который может вам помочь: http://jim -mcbeath.blogspot.com / 2011/03 / java-nio-and-scala-продолжений.html

2 голосов
/ 26 марта 2011

В Scala есть множество инструментов для параллелизма, а в NIO есть несколько инструментов для неблокирующего ввода-вывода. Поэтому неудивительно, что существует множество замечательных библиотек, которые помогают соединить точки:

  • Finagle

    ... библиотека для строительства асинхронные RPC-серверы и клиенты в Java, Scala или любом языке JVM. Построенный на вершине Нетти, Finagle обеспечивает богатый набор инструментов, которые являются протоколом независимый.

  • Akka - довольно приятный, многофункциональный пакет актеров / параллелизма / сервисов, который также использует Netty для своих встроенных функций удаленного взаимодействия

  • Naggati2 - еще один из Twitter, также построенный на Netty, хотя он не уверен, что он заменен Finagle.

...