Новая ОС от Microsoft с приоритетом на многоядерность

Новость можно прочитать здесь.

Цитата: "... вместо того, чтобы полностью изолировать программу от оборудования с помощью драйвера, в Barrelfish есть своего рода база данных, в которой хранится низкоуровневая информация об оборудовании. Ядро системы однопоточно и непрерывно. Планирование происходит одновременно с передачей сообщений, а получение сообщения просто активирует поток ожидания. В ОС также используются концепты микроядер, согласно которой драйвера выполняются в защищенной среде, например в L4."

- Похоже, что многопоточность реализуется по "правилу одного потока", которое следует применять при использовании Swing.

В Swing есть очередь выполнения, и есть диспетчер событий этой очереди. К этому диспетчеру событий мы можем обратиться из любого потока. Диспетчер событий просто поставит в очередь то действие, которое вы хотите чтобы оно выполнилось. Никаких обращений к компонентам Swing (хотя есть исключения, в частности некоторые read-свойства можно использовать) - только через этот диспетчер.

После постановки вашего действия в очередь событий, вы можете как "заблокироваться" на этом (дождаться выполнения, выполнение ведь, по своему характеру - является отложенным), а можете и асинхронно - выполнять что-то либо в программе, предполагая что в Swing-е со временем что-то изменится, то что вам нужно (иногда это очень удобно, например вы постоянно "пингуете" эту очередь, добавляя туда, например, новые данные индикации загрузки - на сколько система будет успевать - она будет изображать вашу индикацию загрузки).

Пример кода:

/* Без блокировки.
 * Если нужно с блокировкой, т.е. дождаться выполнения,
 * то используем метод EventQueue.invokeAndWait(...)
 */
EventQueue.invokeLater
(
    new Runnable()
    {
        public void run()
        {
            label.setText(percentage+"% выполнено");
        }
    }
);


Новая ОС, в дополнении к этому, по видимому применяет аналог транзакционной памяти, которую вводят в .NET 4.

В заключении скажу, что в J2SE 6 - добавили разработанный одним из программистов класс SwingWorker, который капельку упрощает пример, описанный выше (инкапсулирование + паттерн Template Method - проще говоря вам предоставляется метод для реализации задачи, и механизм для запуска всего).

Ну а все остальное вы найдете, как всегда, в Интернете прочитать более подробно можно в постоянно упоминаемой мною книге Хорстманна по J2SE 6 (в данном случае - в 1-ом томе ее).
Кому любопытно и кто кликнет по ссылке выше о книге - там уже появился в том числе и мой комментарий: :)

"Книга, конечно, хорошая, но объем 8-ого издания стал меньше на процентов 10%, чем в 7-ом издании (сравниваю по двум томам).
Опечаток больно много. Но, как написали ниже, все же не критично (но переводчику и корректору с большими ... ой, ушами - уши бы я открутил...)
"

0 коммент.:

Отправить комментарий