Воссоздание поточной обработки и знания параллелизма на все больше популярных языках

попробуйте изменить параметр сортировки на

val sortOrder = "${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} ASC"

, также CONTACT_ID никогда не должно быть нулевым, поэтому я удалил бы часть

AND ${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} IS NOT NULL

.

7
задан David Koelle 9 March 2009 в 19:10
поделиться

5 ответов

Следует иметь в виду, что потоки являются только одной из нескольких возможных моделей для контакта с "параллелизмом". Python, например, имеет один из самых усовершенствованных асинхронных (базирующееся событие) нерезьбовые модели в Скрученном. Неблокирующиеся модели довольно мощны и используются в качестве альтернатив потокам в большинстве самых высоких приложений масштабирования там (например, nginx, lighttpd).

Ваше предположение, что другим популярным языкам нужны потоки, может просто быть признаком центрального Java (и следовательно центральный потоком) мировоззрение. Смотрите на страницу C10K для немного датированного, но очень информативного взгляда на несколько моделей для того, как обработать большие объемы параллельных запросов.

5
ответ дан 6 December 2019 в 08:46
поделиться

Я думаю, что ответ - и да и нет. Java возможно имеет самую четко определенную модель памяти и семантику выполнения обычно используемых императивных языков (Java, C++, Python, Ruby, и т.д.). В некотором смысле другие языки или испытать недостаток в этом полностью или играют в догонялки (если это даже возможно, учитывая незрелость моделей потоков).

C++ является, вероятно, существенным исключением - это шагало то же основание для C++ 0x и возможно пошло вне текущего состояния модели Java от моего впечатления.

Я говорю "нет", потому что сообщества не изолируются. Многие парни, работающие над этим материалом, вовлечены (по крайней мере, с точки зрения руководства, если не от прямой руки в спецификациях) больше чем на одном языке. Так, существует много перекрестных помех между парнями, работающими над JMM и парнями, работающими над C++ 0x спецификации, поскольку они по существу решают те же проблемы со многими из тех же базовых драйверов (от аппаратных парней внизу и пользователей наверху). И я вполне уверен существуют перекрестные помехи на некотором уровне между JVM / лагеря CLR также.

Как другие упомянули, существуют также другие модели для параллелизма: агенты в Erlang и Scala, agents/STM в Clojure, повышении FP F#, Scala, Haskell, CCR и PLINQ наполняют на земле CLR и т.д. Это - захватывающее время прямо сейчас! Мы можем использовать столько экспертов по параллелизму, сколько мы можем найти, что я думаю.... :)

3
ответ дан 6 December 2019 в 08:46
поделиться

Основные принципы параллельного программирования существовали перед Java и были получены в итоге в тех книгах Java, о которых Вы говорите. java.util.concurrent библиотека была так же получена на основании предыдущего кода и научно-исследовательских работ на параллельном программировании.

Однако некоторые вопросы реализации характерны для Java. Это имеет указанную модель памяти, и параллельные утилиты в Java адаптируются в соответствии со специфическими особенностями этого. С некоторой модификацией они могут быть портированы на другие языки/среды с различными характеристиками модели памяти.

Так, Вам, возможно, понадобилась бы книга, чтобы преподавать Вам каноническое использование инструментов параллелизма на других языках, но оно не будет изобретать велосипед.

11
ответ дан 6 December 2019 в 08:46
поделиться

Это не приманка пламени, но по моему скромному мнению Java имеет одну из более простых и более ограниченных моделей для поточной обработки и доступного параллелизма. Это - не обязательно плохая вещь, но на уровне гранулярности она предлагает его, означает, что перспектива, она дает Вам того, что параллелизм и как иметь дело с нею, по сути ограничена, если у Вас есть "Java центральное" представление (как кто-то еще выразился).

Если Вы серьезно относитесь к параллелизму, то стоит исследовать другие языки точно, потому что существуют различные модели и идиомы.

Некоторыми самыми горячими областями является свободное от блокировок программирование (Вы будете видеть многое из него, но часто имевший проблемы, в C++) и функциональное программирование (то, которое было вокруг некоторое время, но возможно, становится все больше релевантным. Главным примером в случае параллелизма является, вероятно, Erlang).

1
ответ дан 6 December 2019 в 08:46
поделиться

Kamaelia - это проект (который я начал и продолжать работать), в частности, именно задает цель при создании параллелизма, который вы хотите использовать, а не боль. В практическом выражении это означает, что он в первую очередь является моделью общего нет ничего с моделей передачи сообщений (в зависимости от мирового мнения из труб OCTAM & Unix).

В основе того, что цель - это желание сделать параллелизм простым в использовании для среднего разработчика, защищенного их из нашие проблем, вызванных ряд подходов к параллелизму. (Есть куча презентаций на SlideShare, объясняя, почему и как там есть)

Кроме того, он предоставляет простую модель транзакционной памяти программного обеспечения для ситуаций, когда вы должны делиться данными, и использует намеренно простой API.

Основная реализация Kamaelia находится в Python, с реализацией игрушек в Ruby & C ++. Кто-то еще портировал базовый подход к е, а также в Java. (Хотя человеку Java исчезло) (Игрушечные реализации - это здравоохранение, проверяет идеи, которые могут работать на других языках, если нуждаетесь в том, чтобы быть переделываемым как местные идиомы)

Возможно, ваш вопрос не должен быть «чем эти языки учится», Но «Что может в том, что сообщество Java учится, ища в другом месте?». Многие люди, которые изучают Python, являются лигистическими иммигрантами из других стран и приносят свои знания о других языках с ними, и поэтому, откуда я сижу, похоже, Python уже смотрит на другие языки для вдохновения.

Выбирая что-то конкретное, например, Это говорит и пишет приложение - который является инструментом для обучения маленьким ребенком для чтения и записи, на основе ввода ручки, распознавание почерка и синтезацию речи - использует несколько Дюжина одновременного подсистем, проходит на приемлемой скорости на одном ядровой машине, будет легко поддаваться запущению на многочленной машине. Тем не менее, причина для количества одновременного подсистем, однако, не имеет ничего общего с «желающим сделать приложение параллельно», но больше делать с «Как я могу проще написать, простираться и поддерживать?». Дело в том, что он заканчивается эммарально параллельно, является вторичным бонусом.

Там полный учебник - прагматическое совпадение - связано с первой страницы. (Notes, Slides, Video & Code Bundle)

Модель может быть улучшена, и предложения приветствуются - жизнь была бы очень скучной, если мы все просто «прекратили», пытаясь сделать лучшие инструменты - но игнорируя то, что уже существует немного ... приступчивый. Если это кажется немного резким, пожалуйста, посмотрите сегодняшний дилберт .

: -)

1
ответ дан 6 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: