Можно ли обеспечить многопоточность без разделения ресурсов на уровне ОС или языка программирования?(OSX, Objective-C) - PullRequest
3 голосов
/ 22 июля 2010

Я пытаюсь реализовать актерскую модель параллелизма в Objective-C, потому что я хочу избежать печально известных проблем общего изменяемого состояния, блокировок, семафоров и т. Д. Это можно сделать, но это требует реального дисциплина, чтобы избежать случайного использования общего состояния.

Один из способов применения правила без совместного использования ресурсов состоит в использовании отдельных процессов вместо отдельных потоков, но я думаю, что это излишне и будет иметь неприятные накладные расходы.То, что я действительно хотел бы, является чем-то, что достигает той же цели, но более легким способом.Есть что-нибудь, что подходит под это описание?

Ответы [ 4 ]

1 голос
/ 10 августа 2010

Короткий ответ на ваш вопрос, к сожалению, таков: «Нет, нет средства ОС, которое может обеспечить совместное использование - ничего более легкого, чем процесс».Теоретически это было бы интересным направлением для инструмента статического анализа (например, clang), но я не знаю ни одного такого инструмента сегодня.

Тем не менее, вы внимательно изучили Grand CentralDispatch (также известный как libdispatch) и блоки?

Мой собственный опыт показывает, что GCD и блоки значительно упрощают соблюдение дисциплины, необходимой для параллелизма без совместного использования ресурсов.Вы упомянули выше, что вы «уже знакомы с NSOperation, блоками и т. Д.», Но я бы порекомендовал по-настоящему сесть и изучить, что вы можете с ними сделать.Кроме того, существует множество возможных шаблонов с API диспетчеризации, которые нелегко реализовать поверх абстракций NSBlockOperation / NSOperationQueue, поэтому не бойтесь углубляться в базовые API libdispatch.

1 голос
/ 02 августа 2010

ActorKit

Это небольшая бета, но она работает.Должен дать вам место для начала худшего случая.

0 голосов
/ 02 августа 2010

Хороший подход для вас - передача сообщений. Два актера или нити устанавливают канал связи между ними. Семантика этого канала может быть сложной или простой. Простая семантика заключается в том, что сообщения атомарно пишутся и атомарно потребляются. Это может быть использовано для реализации подхода с общим доступом и является методом выбора для многих моделей программирования.

Эта модель используется языком Google GO.

0 голосов
/ 22 июля 2010

Никогда не бойся документации! Взгляните на NSOperation или на более широкое понимание через Руководство по программированию параллелизма

- Frank

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...