От чего зависит круг задач, которые должен решать компьютерный исполнитель
Обновлено: 21.11.2024
Параллелизм Java (многопоточность). В этой статье описывается, как выполнять параллельное программирование с помощью Java. Он охватывает концепции параллельного программирования, неизменности, потоков, структуры исполнителей (пулов потоков), фьючерсов, вызываемых объектов CompletableFuture и структуры fork-join.
1. Параллелизм
1.1. Что такое параллелизм?
Параллелизм — это возможность запускать несколько программ или несколько частей программы параллельно. Если трудоемкую задачу можно выполнять асинхронно или параллельно, это повышает пропускную способность и интерактивность программы.
Современный компьютер имеет несколько ЦП или несколько ядер в одном ЦП. Возможность использовать эти многоядерные процессоры может стать ключом к успешному созданию крупномасштабного приложения.
1.2. Процесс против потоков
процесс выполняется независимо и изолирован от других процессов. Он не может напрямую обращаться к общим данным в других процессах. Ресурсы процесса, т.е. память и процессорное время выделяются ему через операционную систему.
поток — это так называемый облегченный процесс. У него есть собственный стек вызовов, но он может обращаться к общим данным других потоков в том же процессе. Каждый поток имеет свой собственный кеш памяти. Если поток читает общие данные, он сохраняет эти данные в своем собственном кеше памяти.
Поток может перечитать общие данные.
Приложение Java по умолчанию запускается в одном процессе. В приложении Java вы работаете с несколькими потоками для достижения параллельной обработки или асинхронного поведения.
2. Улучшения и проблемы с параллелизмом
2.1. Пределы параллелизма
В приложении Java вы работаете с несколькими потоками, чтобы добиться параллельной обработки или асинхронного поведения. Параллелизм обещает выполнить определенную задачу быстрее, поскольку эти задачи могут быть разделены на подзадачи, и эти подзадачи могут выполняться параллельно. Конечно, время выполнения ограничено частями задачи, которые могут выполняться параллельно.
Теоретически возможный прирост производительности можно рассчитать по следующему правилу, известному как закон Амдала.
Если F — это процент программы, которая не может выполняться параллельно, а N — количество процессов, то максимальный прирост производительности равен 1 / (F+ ((1-F)/N)).
2.2. Проблемы параллелизма
Потоки имеют собственный стек вызовов, но также могут получать доступ к общим данным. Следовательно, у вас есть две основные проблемы: проблемы с видимостью и доступом.
Проблема видимости возникает, если поток A считывает общие данные, которые впоследствии изменяются потоком B, а поток A не знает об этом изменении.
Проблема доступа может возникнуть, если несколько потоков обращаются к одним и тем же общим данным и изменяют их одновременно.
Проблемы с видимостью и доступом могут привести к:
3. Параллелизм в Java
3.1. Процессы и потоки
Программа Java выполняется в собственном процессе и по умолчанию в одном потоке. Java поддерживает потоки как часть языка Java через код потока. Приложение Java может создавать новые потоки с помощью этого класса.
Java 1.5 также обеспечивает улучшенную поддержку параллелизма с пакетом java.util.concurrent.
3.2. Блокировки и синхронизация потоков
Java предоставляет блокировки для защиты определенных частей кода от одновременного выполнения несколькими потоками. Самый простой способ заблокировать определенный метод или класс Java — определить метод или класс с помощью ключевого слова synchronized.
Ключевое слово synchronized в Java обеспечивает:
что только один поток может выполнять блок кода одновременно
что каждый поток, входящий в синхронизированный блок кода, видит последствия всех предыдущих модификаций, защищенных той же блокировкой
Синхронизация необходима для взаимоисключающего доступа к блокам и для надежной связи между потоками.
Вы можете использовать ключевое слово synchronized для определения метода. Это гарантирует, что только один поток может войти в этот метод одновременно. Другой поток, вызывающий этот метод, будет ждать, пока первый поток не покинет этот метод.
Вы также можете использовать ключевое слово synchronized для защиты блоков кода внутри метода. Этот блок охраняется ключом, который может быть либо строкой, либо объектом. Этот ключ называется замком.
Весь код, защищенный одной и той же блокировкой, может одновременно выполняться только одним потоком.
Например, следующая структура данных гарантирует, что только один поток может получить доступ к внутреннему блоку методов add() и next().
3.3. Неустойчивый
Если переменная объявлена с ключевым словом volatile, то гарантируется, что любой поток, считывающий это поле, увидит самое последнее записанное значение. Ключевое слово volatile не будет выполнять взаимоисключающую блокировку переменной.
Начиная с Java 5, доступ для записи к переменной volatile также будет обновлять энергонезависимые переменные, которые были изменены тем же потоком. Это также можно использовать для обновления значений в ссылочной переменной, например. для изменчивого изменчивого человека. В этом случае вы должны использовать временную переменную person и использовать установщик для инициализации переменной, а затем присвоить временную переменную окончательной переменной. Это сделает изменение адреса этой переменной и значения видимыми для других потоков.
4. Модель памяти Java
4.1. Обзор
Модель памяти Java описывает связь между памятью потоков и основной памятью приложения.
Он определяет правила, по которым изменения в памяти, сделанные потоками, распространяются на другие потоки.
Модель памяти Java также определяет ситуации, в которых поток повторно очищает свою память из основной памяти.
Он также описывает, какие операции являются атомарными, и порядок операций.
4.2. Атомарная операция
Атомарная операция – это операция, которая выполняется как отдельная единица работы без возможности вмешательства со стороны других операций.
Спецификация языка Java гарантирует, что чтение или запись переменной является атомарной операцией (если только переменная не имеет тип long или double ). Переменные операций типа long или double являются атомарными только в том случае, если они объявлены с ключевым словом volatile.
Предположим, что i определено как int . Операция i++ (приращение) не является атомарной операцией в Java. Это также относится к другим числовым типам, например. долго.
Операция i++ сначала считывает значение, которое в данный момент хранится в i (атомарные операции), а затем добавляет к нему единицу (атомарные операции). Но между чтением и записью значение i могло измениться.
Начиная с Java 1.5, язык java предоставляет атомарные переменные, например. AtomicInteger или AtomicLong, которые предоставляют такие методы, как getAndDecrement() , getAndIncrement() и getAndSet(), которые являются атомарными.
4.3. Обновление памяти в синхронизированном коде
Модель памяти Java гарантирует, что каждый поток, входящий в синхронизированный блок кода, увидит последствия всех предыдущих изменений, защищенных той же блокировкой.
5. Неизменяемость и защитные копии
5.1. Неизменяемость
Самый простой способ избежать проблем с параллелизмом — использовать между потоками только неизменяемые данные. Неизменяемые данные — это данные, которые нельзя изменить.
Чтобы сделать класс неизменяемым, определите класс и все его поля как final.
Также убедитесь, что никакие ссылки на поля не исчезают во время построения. Поэтому любое поле должно:
нет метода установки
копироваться в конструкторе, если это изменяемый объект, чтобы избежать изменения этих данных извне
никогда не возвращаться напрямую или иным образом не раскрываться вызывающему абоненту
не изменять или, если изменение происходит, это изменение не должно быть видно снаружи
Неизменный класс может иметь некоторые изменяемые данные, которые используются для управления его состоянием, но извне ни этот класс, ни какой-либо атрибут этого класса не могут быть изменены.
Для всех изменяемых полей, например Массивы, которые передаются классу извне на этапе построения, класс должен сделать защитную копию элементов, чтобы убедиться, что никакой другой объект извне не может изменить данные
5.2. Защитные копии
Вы должны защитить свои классы от вызова кода. Предположим, что вызывающий код сделает все возможное, чтобы изменить ваши данные так, как вы этого не ожидаете. Хотя это особенно верно в случае неизменяемых данных, это также верно и для неизменяемых данных, которые вы не ожидаете изменить извне вашего класса.
Чтобы защитить свой класс от этого, вы должны копировать данные, которые вы получаете, и возвращать только копии данных вызывающему коду.
В следующем примере создается копия списка (ArrayList) и возвращается только копия списка. Таким образом, клиент этого класса не может удалять элементы из списка.
6. Потоки в Java
Runnable — это интерфейс с определением метода run(). Этот метод вызывается объектом Thread и содержит работу, которую необходимо выполнить. Следовательно, Runnable — это задача, которую необходимо выполнить. Поток — это рабочий, выполняющий эту задачу.
Следующее демонстрирует задачу (Runnable), которая подсчитывает сумму заданного диапазона чисел. Создайте новый проект Java с именем de.vogella.concurrency.threads для примера кода этого раздела.
В следующем примере показано использование классов Thread и Runnable.
Непосредственное использование класса Thread имеет следующие недостатки:
Создание нового потока приводит к снижению производительности.
Слишком много потоков может привести к снижению производительности, так как процессору необходимо переключаться между этими потоками.
Вы не можете легко контролировать количество потоков, поэтому вы можете столкнуться с ошибками нехватки памяти из-за слишком большого количества потоков.
7. Пулы потоков с Executor Framework
Вы найдете эти примеры в разделе исходного кода в проекте Java под названием de.vogella.concurrency.threadpools. |
Пулы потоков управляют пулом рабочих потоков. Пулы потоков содержат рабочую очередь, содержащую задачи, ожидающие выполнения.
Пул потоков можно описать как набор объектов Runnable (рабочая очередь) и соединение запущенных потоков.
Эти потоки работают постоянно и проверяют рабочий запрос на наличие новой работы. Если нужно выполнить новую работу, они выполняют этот Runnable. Сам класс Thread предоставляет метод, например. execute(Runnable r), чтобы добавить новый объект Runnable в рабочую очередь.
Среда Executor предоставляет пример реализации интерфейса java.util.concurrent.Executor, например. Executors.newFixedThreadPool(int n), который создаст n рабочих потоков. ExecutorService добавляет в Executor методы жизненного цикла, что позволяет выключить Executor и дождаться завершения.
Есть два типа исполнителей: формальные и неформальные .
Формальный исполнитель всегда выполняет одну и ту же команду одним и тем же способом.
Неофициальный исполнитель может выполнять команду по-разному.
Например, при повторном прослушивании диска с любимой мелодией можно быть уверенным, что он воспроизводится проигрывателем (формальным исполнителем) точно так же. Но вряд ли кто-то из певцов (неформальный исполнитель) сможет исполнить песню из своего репертуара совершенно одинаково несколько раз.
Как правило, человек выступает в роли неформального исполнителя.
Формальными исполнителями являются преимущественно технические устройства.
Человек в роли неформального исполнителя сам отвечает за свои действия.
Объект, который его контролирует, отвечает за действия формального исполнителя.
Рассмотрим более подробно набор формальных исполнителей. Формальные исполнители необычайно разнообразны, но для каждого из них можно указать круг решаемых задач, среду, систему команд, систему отказов и режимы работы.
- Спектр решаемых задач. Каждый исполнитель создан для решения определенного класса задач.
- Среда художника. Область, обстановка, условия, в которых действует исполнитель, принято называть средой данного исполнителя.
- Система команд Исполнителя. Приказ на выполнение исполнителем отдельного завершенного действия называется приказом. Совокупность всех команд, которые могут быть выполнены определенным исполнителем, образует СКИ - систему команд исполнителя.
- Система отказа исполнителя. Отказ «не понимаю» возникает, когда исполнителю дается команда, не входящая в его СКИ. Отказ «не могу» возникает, когда команда от СКИ не может быть им выполнена в конкретных условиях внешней среды.
- Режимы работы исполнителя. Для большинства исполнителей предусмотрены прямой и запрограммированный режимы управления. В первом случае исполнитель ожидает команды от человека и немедленно выполняет каждую полученную команду. Во втором случае исполнителю сначала дается полная последовательность команд (программа), а затем он все эти команды выполняет в автоматическом режиме. Ряд исполнителей работают только в одном из этих режимов.
Разработка алгоритма - трудоемкая задача, требующая от человека глубоких знаний и большого количества времени. Решение задачи по готовому алгоритму требует от исполнителя лишь строгого соблюдения заданной инструкции. Исполнитель не вникает в смысл того, что он делает, и не аргументирует, почему он действует так, а не иначе, - он действует формально. С этим связана возможность автоматизации деятельности человека:
- процесс решения задачи представлен в виде последовательности простейших операций;
- создается машина (автомат), способная выполнять эти операции в заданной алгоритмом последовательности;
- человек освобождается от рутинной деятельности, выполнение алгоритма возлагается на автоматическое устройство.
<р>3. Напишите программу, которая в последовательности натуральных чисел определяет число, кратное 4. Программа получает на вход количество чисел в последовательности, а затем сами числа. Последовательность всегда содержит число, кратное 4. Количество чисел не превышает 1000. Введенное число не превышает 30 000. Программа должна вывести одно число - число кратное 4
<р>5. Напишите программу, которая в последовательности натуральных чисел определяет сумму чисел, кратных 3. Программа получает на вход количество чисел в последовательности, а затем сами числа. Последовательность всегда содержит число, кратное 3. Количество чисел не превышает 100. Введенные числа не превышают 300. Программа должна вывести одно число - сумму чисел, кратных 3.
<р>7. Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 4. Программа получает на вход количество чисел в последовательности, а затем сами числа. Последовательность всегда содержит число, кратное 4. Количество чисел не превышает 1000. Введенное число не превышает 30 000. Программа должна вывести одно число - максимальное число, кратное 4.
<р>9. Напишите программу, которая в последовательности натуральных чисел определяет количество чисел, оканчивающихся на 3. Программа получает на вход количество чисел в последовательности, а затем сами числа. Последовательность всегда содержит число, оканчивающееся на 3. Количество чисел не превышает 1000. Введенное число не превышает 30000. Программа должна вывести одно число - количество чисел, оканчивающихся на 3.
<р>13. Напишите программу, которая в последовательности натуральных чисел определяет количество чисел, оканчивающихся на 6. Программа получает на вход количество чисел в последовательности, а затем сами числа. Последовательность всегда содержит число, оканчивающееся на 6. Количество чисел не превышает 1000. Введенное число не превышает 30000. Программа должна вывести одно число - количество чисел, оканчивающихся на 6.
<р>15. Напишите программу, которая определяет сумму чисел, делящихся на 5, в последовательности натуральных чисел. Программа получает на вход количество чисел в последовательности, а затем и сами числа. Последовательность всегда содержит число, кратное 5. Количество чисел не превышает 100. Введенные числа не превышают 300. Программа должна вывести одно число - сумму кратных 5.
<р>17. Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, делящихся на 6 и оканчивающихся на 4. На вход программа получает натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входящий в последовательность). Количество номеров не превышает 1000. Количество введенных номеров не превышает 30 000. Программа должна вывести одно число: сумму всех чисел, делящихся на 6 и оканчивающихся на 4.
<р>19. Напишите программу для решения следующей задачи. Камера наблюдения автоматически регистрирует скорость проезжающих мимо транспортных средств, округляя значения скорости до целых чисел. Необходимо определить максимальную зарегистрированную скорость автомобиля. Если скорость хотя бы одного автомобиля была меньше 30 км/ч, выведите «YES», иначе выведите «N0». Программа получает на вход количество проезжающих автомобилей N (1
Более сложный исполнитель. Работает по программам, созданным человеком. Программу выбирает человек. Машина работает автоматически. Более сложный исполнитель. Работает по программам, созданным человеком. Программу выбирает человек. Машина работает автоматически. Подрядчик - стиральная машина
Неформальные и формальные исполнители В роли неформального исполнителя чаще всего выступает человек В роли формального исполнителя чаще всего выступает техническое устройство Неформальный исполнитель несет ответственность за свои действия За действия формального исполнителя отвечает объект который его контролирует
Формальный исполнитель Формальный исполнитель всегда выполняет одну и ту же команду одним и тем же способом. Автоматическая фасовочно-упаковочная машина Для каждого формального исполнителя можно указать: круг решаемых задач; Среда; система команд; система отказов; режимы работы.
Система отказов исполнителя Отказ «не понимаю» возникает, если дана команда, не входящая в состав СКИ. Отказ «не могу» возникает, если команда от СКИ не может быть выполнена в конкретных условиях внешней среды. ? Стиральная машина не может выполнить команду полоскания, если в машину не подается вода. ?
Автоматизация — замена части человеческого труда работой машины: процесс решения задачи представляется в виде последовательности простейших операций; создается машина, способная выполнять эти операции в заданной последовательности; выполнение алгоритма возложено на автоматическое устройство; человек освобождается от рутинной деятельности. Автоматизация
Самое главное, что Исполнитель — это человек, группа людей, животное или техническое устройство, способное выполнять заданные команды. Формальный исполнитель всегда выполняет одну и ту же команду одним и тем же способом. Для каждого формального исполнителя можно указать: - круг решаемых задач; - Среда; –Система команд; –Система отказов; – Режимы работы.
Эти советы уменьшат количество осложнений, которые могут возникнуть при работе
Эндрю Битти входил в первоначальную редакционную команду Investopedia и двадцать лет писал статьи на самые разные финансовые темы, включая бизнес, инвестиции, личные финансы и трейдинг.
Маргарита является сертифицированным специалистом по финансовому планированию (CFP®), сертифицированным консультантом по пенсионному планированию (CRPC®), сертифицированным специалистом по пенсионному доходу (RICP®) и сертифицированным консультантом по социально ответственным инвестициям (CSRIC). Она работает в сфере финансового планирования более 20 лет и проводит дни, помогая своим клиентам обрести ясность, уверенность и контроль над своей финансовой жизнью.
Ярилет Перес — опытный мультимедийный журналист и специалист по проверке фактов со степенью магистра журналистики. Она работала в нескольких городах, освещая последние новости, политику, образование и многое другое. Она занимается личными финансами, инвестициями и недвижимостью.
Быть распорядителем наследства — это большая ответственность. Таким образом, это может быть очень сложно для тех, кто не готов к этой задаче. Несколько простых шагов при жизни наследодателя могут значительно облегчить работу. Мы перечислили эти шаги ниже.
Ключевые выводы
- Существует множество обязанностей, связанных с исполнением имущественных обязанностей.
- Одной из распространенных проблем, которую многие исполнители упускают из виду, является рассредоточение личных вещей, имеющих большую сентиментальную ценность, но небольшую финансовую ценность.
- Если наследодатель ежегодно отслеживает наследство в электронном виде, душеприказчик будет иметь хороший снимок активов, когда это необходимо.
- Совместные учетные записи, регулярные обновления и запечатывание онлайн-документов — способы упростить процесс для исполнителей.
- У душеприказчика должна быть запись о присутствии наследодателя в Интернете, чтобы деактивировать аккаунты.
1. Узнайте местонахождение завещания и других документов
Это очевидный и важный первый шаг. Работа душеприказчика упрощается, если наследодатель хранит оригиналы завещаний, актов, страховых полисов, документов о партнерстве или других важных документов в согласованном месте (дома или в сейфе) и хранит копии в резервном месте. Копии могут находиться непосредственно у душеприказчика или у адвоката наследодателя.
Помните, что после смерти наследодателя доступ к сейфу может быть ограничен. Полезно, если несколько человек, например супруг, имеют доступ к ящику.
2. Объединение имущества и счетов
Если у наследодателя есть супруг(а), он, скорее всего, предпочтет, чтобы активы были немедленно переданы вдове или вдовцу, если это возможно. Самый простой способ обеспечить это — настроить все учетные записи как совместные и убедиться, что свойства и титулы указаны на оба имени, что также работает для коммерческих предприятий с участием партнера. Это дает дополнительное преимущество, заключающееся в уменьшении размера поместья, если обе стороны не умирают одновременно.
Исполнитель также должен получить от наследодателя подтверждение того, что правильный бенефициар указан для счетов, требующих уточнения, таких как пенсии, пенсионные счета, страховые полисы и т. д. Если наследодатель разведен, вступает в повторный брак, переживает ребенка или переживает какое-либо аналогичное значимое событие, список бенефициаров, вероятно, потребуется обновить.
3. Запишите предпочтения наследодателя
Вы можете этого не осознавать, но есть определенные вещи, которые вы должны знать или записать до смерти наследодателя. Например, хотят ли они большие поминки или небольшую церемонию кремации? Есть ли благотворительные организации, которые они хотят поддержать после смерти всех бенефициаров? Важно, чтобы эти предпочтения были сделаны в письменной форме и подписаны наследодателем.
4. Список владений и назначение получателей
Существует одна распространенная проблема, которую многие исполнители упускают из виду — рассредоточение личных вещей, которые имеют небольшую финансовую ценность, но большую сентиментальную ценность. Работая с наследодателем, душеприказчик может составить черновой список для распоряжения личными вещами, а также систему распределения. Завещатель также должен написать свое обоснование того, кому какой подарок достался. Предоставление списка заинтересованным сторонам может устранить проблемы.
Основное преимущество работы с этим списком заключается в том, что душеприказчик может отслеживать подарки, подаренные до смерти наследодателя, поскольку многие люди начинают разбрасываться личными вещами с возрастом. Состоятельные люди (HNWI) также часто делают финансовые подарки перед смертью. Организованное рассредоточение может облегчить работу исполнителя и помочь сбалансировать вопросы справедливости.
Исполнитель должен получить от наследодателя подтверждение того, что для таких счетов, как пенсии, пенсионные счета и страховые полисы, указан правильный бенефициар.
5. Настройте годовой бухгалтерский отчет и график обновления
Компьютеры значительно упрощают отслеживание изменений в учетных записях и имуществе. Если наследодатель отслеживает состояние в электронном виде, душеприказчик будет иметь хороший снимок активов, когда это необходимо. Этот электронный документ также сократит время, затрачиваемое на поиск золотых часов, которые наследодатель подарил внуку, или на отслеживание средств, которые предположительно находились на пустом инвестиционном счете.
6.Иметь запечатанный документ онлайн-аккаунтов
В эпоху цифровых технологий душеприказчик также должен иметь запись о присутствии наследодателя в Интернете, например в Facebook, Paypal, eBay и других, для деактивации учетных записей. Те же цели могут быть достигнуты путем предоставления свидетельства о смерти на многих из вышеперечисленных или подобных сайтов, но документ упрощает работу исполнителя.
7. Знакомьтесь с соответствующими специалистами
Исполнители должны быть знакомы с бухгалтером, юристом и другими специалистами, которых нанимает наследодатель. У них могут быть дополнительные советы, относящиеся к ситуации наследодателя, например, различные партнерские отношения и сложное владение имуществом.
Итог
Подготовка может значительно облегчить работу исполнителя. Выполнение вышеперечисленных шагов, пока наследодатель еще жив, также поможет убедиться, что душеприказчик выполняет желание наследодателя. Завещатели также могут активно настраивать такие процессы, чтобы облегчить работу душеприказчика.
Серверные программы, такие как базы данных и веб-серверы, многократно выполняют запросы от нескольких клиентов, и они ориентированы на обработку большого количества коротких задач. Подход к созданию серверного приложения состоит в том, чтобы каждый раз при поступлении запроса создавать новый поток и обслуживать этот новый запрос во вновь созданном потоке. Хотя этот подход кажется простым в реализации, он имеет существенные недостатки. Сервер, который создает новый поток для каждого запроса, будет тратить больше времени и потреблять больше системных ресурсов на создание и удаление потоков, чем на обработку реальных запросов.
Поскольку активные потоки потребляют системные ресурсы, JVM, создающая слишком много потоков одновременно, может привести к нехватке памяти в системе. Это требует ограничения количества создаваемых потоков.
Что такое ThreadPool в Java?
Пул потоков повторно использует ранее созданные потоки для выполнения текущих задач и предлагает решение проблемы накладных расходов на циклы потоков и перегрузки ресурсов. Поскольку на момент поступления запроса поток уже существует, задержка, вызванная созданием потока, устранена, что делает отклик приложения более быстрым.
- Java предоставляет платформу Executor, которая сосредоточена вокруг интерфейса Executor, его субинтерфейса –ExecutorService и класса-ThreadPoolExecutor, который реализует оба этих интерфейса. При использовании исполнителя нужно только реализовать объекты Runnable и отправить их исполнителю для выполнения.
- Они позволяют использовать преимущества многопоточности, но фокусируются на задачах, которые должен выполнять поток, а не на механике потоков.
- Чтобы использовать пулы потоков, мы сначала создаем объект ExecutorService и передаем ему набор задач. Класс ThreadPoolExecutor позволяет установить размер ядра и максимальный размер пула. Runnables, запускаемые определенным потоком, выполняются последовательно.
Инициализация пула потоков с размером = 3 потока. Очередь задач = 5 исполняемых объектов
Методы пула потоков исполнителя
В случае фиксированного пула потоков, если все потоки в настоящее время выполняются исполнителем, ожидающие задачи помещаются в очередь и выполняются, когда поток становится бездействующим.
Пример пула потоков
В следующем руководстве мы рассмотрим базовый пример исполнителя пула потоков — FixedThreadPool.
поиск меню
Урок 5. Общие компьютерные задачи
Обычные компьютерные задачи
Иногда обучение работе с компьютером может показаться непосильным. К счастью, есть некоторые общие навыки работы с компьютером, которые будут работать одинаково практически в любой ситуации. Как только вы научитесь использовать эти навыки, вы сможете использовать их для выполнения различных задач на своем компьютере. В этом уроке мы поговорим о некоторых распространенных командах, которые можно использовать практически в любом приложении, включая вырезание, копирование, вставку и отмену.
Панель меню
Большинство приложений имеют строку меню в верхней части окна. Каждое меню имеет набор команд, которые будут выполнять определенное действие в программе. Хотя каждое приложение отличается, есть некоторые общие команды, которые работают одинаково, независимо от того, какое приложение вы используете. Всякий раз, когда вы открываете программу в первый раз, попробуйте щелкнуть эти меню, чтобы увидеть различные доступные параметры.
Команды меню "Файл"
Вы найдете меню "Файл" в крайней левой части строки меню почти в каждом приложении. Меню «Файл» обычно содержит команды того же типа. Например, среди прочих функций можно создать новый файл, открыть существующий файл и сохранить текущий файл.
Вырезать, копировать и вставлять
Многие приложения позволяют копировать элементы из одного места, а затем вставлять их в другое. Например, если вы работаете с текстовым процессором, вы можете копировать и вставлять текст, чтобы не вводить одно и то же снова и снова. Если есть что-то, что вы хотите переместить из одного места в другое, вы можете вместо этого вырезать и вставить.
Чтобы скопировать и вставить:
- Выберите элемент, который хотите скопировать. В нашем примере мы выберем слово в документе.
- Щелкните правой кнопкой мыши и выберите «Копировать» в появившемся меню. Вы также можете нажать Ctrl+C на клавиатуре.
Чтобы вырезать и вставить:
- Выберите элемент, который хотите вырезать. В нашем примере мы выберем абзац текста в документе.
- Щелкните правой кнопкой мыши и выберите «Вырезать» в появившемся меню. Вы также можете нажать Ctrl+X на клавиатуре.
Чтобы скопировать и вставить файлы:
Команды вырезания, копирования и вставки можно использовать для различных задач на компьютере. Например, если вы хотите создать дубликат файла, вы можете скопировать его из одной папки в другую.
-
Щелкните файл правой кнопкой мыши и выберите «Копировать» в появившемся меню. Вы также можете нажать Ctrl+C на клавиатуре.
Копирование файла — это не то же самое, что создание ярлыка. Вы можете просмотреть наш урок по работе с файлами, чтобы узнать больше об использовании ярлыков.
Отмена изменений
Допустим, вы работаете с текстовым документом и случайно удалили какой-то текст. К счастью, вам не придется заново вводить все, что вы только что удалили! Большинство приложений позволяют отменить последнее действие, когда вы совершаете подобную ошибку. Просто найдите и выберите команду «Отменить», которая обычно находится в верхнем левом углу окна рядом со строкой меню. Вы также можете нажать Ctrl+Z на клавиатуре. Вы можете продолжать использовать эту команду для отмены нескольких изменений подряд.
Обратите внимание, что команда "Отменить" будет работать почти всегда, но не во всех ситуациях. Например, если вы очистите корзину, чтобы навсегда удалить файл, вы не сможете отменить это действие.
Теперь вы знаете некоторые из наиболее часто используемых команд, которые вы сможете использовать практически в любом приложении на своем компьютере. Как мы упоминали ранее в этом уроке, вы также можете использовать сочетания клавиш, чтобы выполнять эти команды еще быстрее. Подробнее о сочетаниях клавиш мы поговорим в нашем уроке «Сочетания клавиш в Windows».
Читайте также: