При чтении на SQLite, я наткнулся на эту цитату в FAQ: "Threads are evil. Avoid them."Есть ли практические альтернативы потокам?
У меня есть много уважения к SQLite, так что я не мог просто игнорировать это. Я подумал, что еще я могу, в соответствии с политикой «избегать», использовать вместо этого, чтобы распараллелить мои задачи. Например, приложение, в котором я сейчас работаю, требует пользовательского интерфейса, который всегда реагирует на запросы и должен периодически опросить несколько веб-сайтов (процесс, который занимает не менее 30 секунд для каждого веб-сайта).
Таким образом, я открыл PDF, связанный с этим FAQ, и по сути кажется, что в документе предлагается несколько методов, которые следует применять вместе с потоками, такими как барьеры или транзакционная память, а не любые методы для замены потоков в целом.
Учитывая, что эти методы не полностью обойтись без резьбы (если я не понял, что говорит бумага), я вижу два варианта: либо SQLite FAQ делает не буквально означает, что он говорит, или существуют практические подходы что фактически избегать использования использования потоков в целом. Есть ли какие-нибудь?
Только быстрое примечание на тасклетах/кооперативная планирования в качестве альтернативы - это отлично смотрится в небольших примерах, но интересно ли большие ише UI-тяжелых приложения могут быть практически распараллеливание в исключительно кооперативном способе. Если вы сделали это успешно или знаете такие примеры, это, безусловно, квалифицируется как действительный ответ!
Не собираюсь добавлять это в качестве ответа, потому что я не чувствую, как его обманывают, но: неблокирующий IO, совместная многозадачность, многопроцессорность + IPC ... и, возможно, потоки. Правильное соединение зависит от отдельного приложения. – hobbs
Для справки, SQLite часто задаваемые вопросы «Проблема с потоками». Из абстракции: «Они отбрасывают наиболее существенные и привлекательные свойства последовательных вычислений: понятность, предсказуемость и детерминизм. Нити, как модель вычислений, дико недетерминированы, а работа программиста превращается в обрезку этого недетерминизма. .. Я спорю о разработке параллельных языков координации на основе звуковых, композиционных формализмов. Я считаю, что такие языки будут давать гораздо более надежные и более параллельные программы ». –