Найти тему
Ostep глава 36. I/O Devices - перевод
Прежде чем перейти к основному содержанию этой части книги (о персистентности), мы сначала введем концепцию устройства ввода-вывода (I/O) и покажем, как операционная система может взаимодействовать с таким объектом. Конечно, ввод-вывод весьма важен для компьютерных систем; представьте себе программу без каких-либо входных данных (каждый раз она выдает один и тот же результат); теперь представьте программу без выходных данных (с какой целью она запускалась?). Очевидно, что для того, чтобы компьютерные системы были интересны, требуются как входные, так и выходные данные...
1 год назад
Ostep глава 35. Dialogue on Persistence - перевод
Профессор: И таким образом мы достигаем третьего из четырех... э-э-э... трех столпов операционных систем: persistence. Студент: Вы сказали три столпа или четыре? Что за четвертый столп? Профессор: Нет, всего три, юный студент, всего три. Стараюсь, чтобы здесь все было просто. Студент: Ладно, хорошо. Но что такое persistence, о прекрасный и благородный профессор? Профессор: На самом деле, вы, вероятно, знаете, значение этого слова в традиционном смысле, не так ли? Как сказал бы словарь: “твердое или упрямое продолжение курса действий, несмотря на трудности или противодействие”...
1 год назад
Ostep глава 34. Summary Dialogue on Concurrency - перевод
Профессор: Итак, у тебя сейчас болит голова? Студент: (принимает две таблетки средства от головной боли) Ну, немного. Трудно думать обо всех способах чередования потоков Профессор: Действительно, это так. Меня всегда поражает, что при одновременном выполнении, всего несколько строк кода могут стать практически невозможными для понимания Студент: Я тоже! Мне, специалисту по информатике, немного неловко не иметь возможности разобраться в пяти строках кода Профессор: О, не расстраивайся так сильно....
1 год назад
Ostep глава 33. Event-based Concurrency (Advanced) - перевод
До сих пор мы писали о параллелизме так, как будто единственный способ создавать параллельные приложения - это использовать потоки. Как и многое в жизни, это не совсем верно. В частности, другой стиль параллельного программирования часто используется как в приложениях на основе графического интерфейса пользователя [O96], так и в некоторых типах интернет-серверов [PDZ99]. Этот стиль, известный как параллелизм на основе событий (event-based concurrency), стал популярным в некоторых современных системах, включая серверные фреймворки, такие как node...
1 год назад
Ostep глава 32. Common Concurrency Problems - перевод
Исследователи потратили много времени и сил разбираясь с багами конкурентного программирования. Написано много работ посвящённых дэдлоку, теме освещенной ранее но в которую мы погрузимся глубже. [С+71] Последние работы были посвящены багам конкурентного программирования не связанным с дэдлоком. В этой главе мы быстро рассмотрим примеры багов конкурентного программирования обнаруженных в реальном коде, для того чтобы лучше понять то какие именно проблемы нужно искать в коде. И теперь наша центральная...
2 года назад
Ostep глава 31. Semaphores - перевод
Как мы теперь знаем, для решения широкого спектра актуальных и интересных проблем параллелизма нужны как блокировки, так и переменные условия. Одним из первых людей, осознавших это много лет назад, был Эдсгер Дейкстра (хотя точную историю трудно узнать [GR92]), известный, среди прочего, своим знаменитым алгоритмом “кратчайших путей” в теории графов [D59], ранней полемикой по структурированному программированию под названием “Утверждения Goto считаются вредными”. [D68a] (какое замечательное название!),...
2 года назад
Как работает Интернет?
Перевод https://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm Введение Как работает Интернет? Хороший вопрос! Рост Интернета стал взрывоопасным, и кажется невозможным избежать бомбардировки www.com Его постоянно показывают по телевидению, слышат по радио и видят в журналах. Поскольку Интернет стал такой важной частью нашей жизни, для наиболее эффективного использования этого нового инструмента необходимо хорошее понимание. Этот технический документ объясняет базовую инфраструктуру и технологии, которые обеспечивают работу Интернета...
2 года назад
Генерация select в django
Не нашёл примеров по теме Поле select для формы в django формируется на основе класса django.forms.fields.ChoiceField Через параметр choices в него можно передать данные, которыми заполнится поле select в шаблоне Функция передаваемая в параметр choices - должна представлять собой список кортежей...
2 года назад
Поиск кратчайшего пути между двумя вершинами с помощью BFS
Для графа на рисунке 1 найдём кратчайший путь между вершинами A и F. Для достижения цели мы можем: 1. Найти все пути между данными вершинами и выбрать кратчайший 2. Выбрать кратчайший путь при достижении искомой вершины Остановимся на 2-м варианте и применим BFS. BSF использует очередь для обхода вершин 1. Добавим вершину А в очередь (рис. 2) 2. Заберём первый элемент из очереди, в нашем случае А, и посмотрим на соседние с ним вершины (C, D, B). Состояние очереди на рисунке 3 3. В очередь добавляем все соседние с А вершины (рисунок 4) и помечаем вершину А как посещённую (рисунок 5) 4...
2 года назад
BFS - поиск в ширину
Эффективен для поиска кратчайшего пути между двумя вершинами в графе в котором все рёбра имеют одинаковый и положительный вес. С задачей поиска кратчайшего пути справится и DFS но для этого алгоритм должен обойти все пути в графе, которыми соединены вершины. В свою очередь алгоритму BFS нет необходимости обходить все пути в графе, чтобы найти кратчайший путь между двумя вершинами. Потому что как только с помощью BFS найден путь между двумя вершинами этот путь и является кратчайшим...
2 года назад
По сведениям Leetcode - самый выгодный вариант использования «поиска в ширину» — это эффективный поиск кратчайшего пути между двумя вершинами в «графе», где все ребра имеют равные и положительные веса.
2 года назад
Является ли граф деревом - алгоритм проверки
Если не знаешь чем граф отличается от дерева - вот короткий пост со свойствами дерева. Depth-first-search с использованием Adjacency List В задачах на программирование граф представлен неудобно, обычно в виде массива рёбер или вершин. Для графа на рисунке 1, такое представление может выглядеть как [ [0,1], [0,2], [0,3], [1,4] ] Первое что нужно сделать - преобразовать такой массив в формат с которым удобно работать. Одним из вариантов является AdjacencyList Затем к полученной структуре нужно применить Depth-first-search модифицированный под конкретную задачу...
461 читали · 2 года назад