Using AI to negotiate a $195k hospital bill down to $33k 🔥 Горячее 💬 Длинная дискуссия
Meta запустила Threads, приложение для обмена сообщениями, которое достигло 100 миллионов пользователей всего за пять дней после релиза в июле 2023 года. Это самый быстрый рост для любого приложения в истории, превзойдя даже ChatGPT. Threads интегрирован с Instagram, позволяя пользователям импортировать список подписчиков и создавать аккаунт без дополнительных усилий. Приложение позиционируется как альтернатива Twitter, особенно после недавних изменений в политике конкурента.
Разработчики столкнулись с критикой за отсутствие API и функцию удаления аккаунта, которая фактически деактивирует профиль, а не удаляет данные. Основатель Meta Марк Цукерберг заявил, что компания планирует добавить поддержку ActivityPub для децентрализованной социальной сети. Несмотря на первоначальный ажиотаж, аналитики отмечают, что удержание пользователей остается ключевым вызовом для Threads, учитывая высокую конкуренцию на рынке социальных платформ.
Комментарии (814)
- Американская система здравоохранения оставляет пациентов уязвимыми к астрономическим счетам, даже если у них есть страховка, и в то же время не предоставляет прозрачности в ценообразовании.
- Искусственный интеллект, включая ChatGPT и Claude, становится инструментом, который позволяет людям оспаривать счета, которые часто включают ошибки или даже мошенничество.
- Система здравоохранения США оставляет людей в долгах, даже если они умерли, и в то же время не предоставляет прозрачности в ценообразовании.
- Искусственный интеллект может помочь людям оспаривать счета, которые часто включают ошибки или даже мошенничество.
How to stop Linux threads cleanly
Остановка потоков Linux требует аккуратного подхода, особенно при работе с низкоуровневыми потоками, созданными через pthread_create или std::thread. В отличие от запуска, корректное завершение потоков позволяет выполнить очистку ресурсов — освобождение памяти, блокировок, сброс логов. Идеального универсального решения не существует, но есть несколько подходов.
Простой метод — организация квази-активного ожидания в каждом потоке с проверкой флага остановки. Когда нужно завершить поток, флаг устанавливается в true, после чего вызывается pthread_join. Цикл не должен быть полностью неблокирующим, но должен завершаться за разумное время. Для потоков, блокирующихся на системных вызовах, используются сигналы для прерывания выполнения. Важно, что даже с этим подходом нужно учитывать обработку сигналов для корректной работы с буферизированным выводом.
Комментарии (77)
- Проблема заключается в том, что POSIX не предоставляет безопасного механизма для остановки потока, и это приводит к тому, что разработчики вынуждены полагаться на
pthread_cancel, который небезопасен и может привести к утечкам ресурсов или повреждению состояния. - Попытки использовать
SIGUSR1иsignalfdдля обработки сигналов в пространстве пользователя не решают проблему, потому что большинство библиотек не ожидают, что их вызовы будут прерваны, и это может привести к повреждению состояния. - Вместо этого, вместо попыток остановить поток, который может быть в любой точке, лучше структурировать код так, чтобы он мог реагировать на сигнал остановки, или использовать модель, где потоки не блокируются на системных вызовах, а вместо этого используют асинхронные вызовы и ожидают на
poll/select/epoll/io_uring. - Некоторые комментаторы отмечают, что в Linux существует
io_uring, который позволяет прервать системный вызов, и что это может быть использовано для реализации остановки потока, но это не решает проблему, что не все вызовы могут быть прерваны таким образом. - В конечном счёте, вместо попыток убить поток, который может быть в любой точке, лучше писать код так, чтобы он был отзывчив к сигналу остановки, и использовать модели, где потоки не блокируются на системных вызовах, а вместо этого используют асинхронные вызовы и ожидают на
poll/select/epoll/io_uring.
A brief history of threads and threading
Первые Mac 1984 года с одноядерным процессором Motorola 68000 выполняли только одно приложение за раз. Переломным моментом стал Switcher (1985), позволявший переключаться между программами, но не запускать их одновременно. В 1987 году MultiFinder представил кооперативную многозадачность, где приложения добровольно уступали процессорное время — однако плохо написанный код мог заблокировать систему.
С появлением A/UX (1988) и Multiprocessing Services (1996) macOS перешла к вытесняющей многозадачности, где планировщик ОС сам распределяет ресурсы. К 2000 году Power Mac G4 с двумя процессорами и Mac OS X принесли поддержку потоков (threads) — легковесных задач в рамках процесса. Сегодня приложение (process) имеет главный поток и может создавать дополнительные, разделяя память, но с отдельными стеками. Это позволяет эффективно использовать многоядерные процессоры современным Mac.
Комментарии (20)
- Участники отмечают неточности в статье о первых многопроцессорных Mac и истории потоков.
- Обсуждается, что для изучения истории потоков более релевантны ОС, отличные от Apple, например, NT, VMS или Solaris.
- Упоминаются ранние реализации потоков (нитей) в таких системах, как UNIVAC EXEC 8 (1966 г.) и библиотека «зеленых потоков» из Apache.
- Подчеркивается, что концепция потоков (threading) не обязательно связана с симметричной многопроцессорностью (SMP).
- Отмечается, что заголовок статьи может вводить в заблуждение, вызвав ожидания обсуждения другой темы.