courses:high_performance_computing:coroutines_map
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| courses:high_performance_computing:coroutines_map [2020/06/02 14:41] – odoronin | courses:high_performance_computing:coroutines_map [2020/06/08 00:58] (current) – odoronin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Coroutines Map ====== | ====== Coroutines Map ====== | ||
| - | Необходимо реализовать следующий интерфейс lock-free map в стиле coroutines: | + | Необходимо реализовать следующий интерфейс lock-free map в стиле coroutines, интерфейс по поведению должен сответстовать [[https:// |
| <code java> | <code java> | ||
| public interface CoroutinesMap< | public interface CoroutinesMap< | ||
| /** | /** | ||
| - | * Добавить (key,value) к ассоциативному контейнеру | + | * Добавить (key,value) к ассоциативному контейнеру. Если key уже существует, |
| * | * | ||
| - | * Алгоритм должен быть как минимум lock-free | + | * Алгоритм должен быть как минимум lock-free. |
| * | * | ||
| * @param key ключ | * @param key ключ | ||
| Line 19: | Line 19: | ||
| * Проверка наличия ключа в множестве | * Проверка наличия ключа в множестве | ||
| * | * | ||
| - | * Алгоритм должен быть как минимум wait-free | + | * Алгоритм должен быть как минимум wait-free |
| * | * | ||
| * @param key значение ключа | * @param key значение ключа | ||
| Line 46: | Line 46: | ||
| /** | /** | ||
| - | * Возвращает lock-free Set элементов для ассоциативного контейнера | + | * Возвращает lock-free |
| * | * | ||
| - | * @return новый экземпляр Set для ассоциативного контейнера | + | * @return новый экземпляр Set для ассоциативного контейнера. Возвращается полная не изменяемая копия |
| */ | */ | ||
| suspend fun entrySet(): Set< | suspend fun entrySet(): Set< | ||
| Line 54: | Line 54: | ||
| </ | </ | ||
| - | В работе можно использовать только JDK 11 и язык программирования Kotlin. Имя класса реализации CoroutinesMapImpl. В работе нужно доработать lock-free-set из прошлой работы до map и использовать как вложенное поле в CoroutinesMapImpl. В конструкторе должно передаваться число потоков в которых будут исполняться запросы для доступа к ассоциативному контейнеру. Сама работа должна выполняться в Exectuors.fixedThreadPool. Все реализованные функции должны быть асинхронными. | + | В работе можно использовать только JDK 11 и язык программирования Kotlin. Имя класса реализации CoroutinesMapImpl. В работе нужно доработать lock-free-set из прошлой работы до map и использовать как вложенное поле в CoroutinesMapImpl. |
| + | |||
| + | * В работе должны быть тесты только на работу с корутинами | ||
| + | * Запрещено использовать asCoroutineDispatcher | ||
| + | * Задачи нужно отправлять через submit в Exectuors.fixedThreadPool, | ||
| При использовании async действия должны выполняться асинхронно | При использовании async действия должны выполняться асинхронно | ||
| <code java> | <code java> | ||
| - | val m = LockFreeMapImpl<String, String> | + | val m = CoroutinesMapImpl<String, String> |
| runBlocking { | runBlocking { | ||
| val a = async { m.put(" | val a = async { m.put(" | ||
| Line 69: | Line 73: | ||
| Если не использовать async, то каждое действие будет блокироваться до получения результата | Если не использовать async, то каждое действие будет блокироваться до получения результата | ||
| <code java> | <code java> | ||
| - | val m = LockFreeMapImpl<String, String> | + | val m = CoroutinesMapImpl<String, String> |
| runBlocking { | runBlocking { | ||
| val a = m.put(" | val a = m.put(" | ||
courses/high_performance_computing/coroutines_map.1591098084.txt.gz · Last modified: 2020/06/02 14:41 by odoronin