Неблокируемый доступ к собственным файлам - однопоточный демон в C? - PullRequest
0 голосов
/ 10 октября 2010

Я обнаружил, что нативный доступ к файлам не имеет «неблокирующего» состояния.(Я прав?)

Я гуглял для демонов, которые являются «неблокирующими», и я нашел тот, который достиг указанного поведения путем потоковой операции доступа к файлу, так что демон выиграл 't block.

Мой вопрос, не будут ли многопоточность и IPC'ы такими операциями быть довольно дорогими?Разве это не имело бы больше смысла для: A) пула перед потоком, просто поместите каждого клиента в поток и дайте ему возможность блокировать те операции, которые ему могут понадобиться.Или,

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

1 Ответ

0 голосов
/ 11 октября 2010

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

Что касается фактических вычислений, выполняемых потоками, выполняющими ввод / вывод, то они ожидают, что ядро ​​разбудит их большую часть времени, поэтому я не стал бы беспокоиться.

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

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

Дайте нам немного больше информации о том, что вы хотите сделать, может быть, есть более простые способы.

...