Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


courses:high_performance_computing:coroutines_map

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
courses:high_performance_computing:coroutines_map [2020/06/02 14:21] odoronincourses:high_performance_computing:coroutines_map [2020/06/05 05:33] odoronin
Line 6: Line 6:
 public interface CoroutinesMap<K: Comparable<K>, V> { public interface CoroutinesMap<K: Comparable<K>, V> {
     /**     /**
-    * Добавить (key,value) к ассоциативному контейнеру+    * Добавить (key,value) к ассоциативному контейнеру. Если key уже существовал, то value для него нужн заменить на ановый
     *     *
-    * Алгоритм должен быть как минимум lock-free+    * Алгоритм должен быть как минимум lock-free.
     *     *
     * @param key ключ     * @param key ключ
Line 19: Line 19:
     * Проверка наличия ключа в множестве     * Проверка наличия ключа в множестве
     *     *
-    * Алгоритм должен быть как минимум wait-free+    * Алгоритм должен быть как минимум wait-free для типов конечной размерноости и lock-free для остальных
     *     *
     * @param key значение ключа     * @param key значение ключа
Line 46: Line 46:
  
     /**     /**
-    * Возвращает lock-free Set элементов для ассоциативного контейнера +    * Возвращает lock-free Immutable Set элементов для ассоциативного контейнера. Аналог Iterator из lock-free-set
     *     *
-    * @return новый экземпляр Set для ассоциативного контейнера +    * @return новый экземпляр Set для ассоциативного контейнера. Возвращается полная не изменяемая копия
     */     */
     suspend fun entrySet(): Set<Map.Entry<K,V>>     suspend fun entrySet(): Set<Map.Entry<K,V>>
Line 54: Line 54:
 </code> </code>
  
-Имя класса реализации CoroutinesMapImpl. +В работе можно использовать только JDK 11 и язык программирования Kotlin. Имя класса реализации CoroutinesMapImpl. В работе нужно доработать lock-free-set из прошлой работы до map и использовать как вложенное поле в CoroutinesMapImpl. Если ваш lock-free-set был написан на java, то можно его импортировать как java файл и доработать до map тоже на языке java, но реализацию CoroutinesMapImpl нужно уже писать на Kotlin.   В конструкторе должно передаваться число потоков в которых будут исполняться запросы для доступа к ассоциативному контейнеру. Сама работа должна выполняться в Exectuors.fixedThreadPool. Все реализованные функции должны быть асинхронными. 
 + 
 +  * В работе должны быть тесты только на работу с корутинами 
 +  * Запрещено использовать asCoroutineDispatcher 
 +  * Задачи нужно отправлять через submit в Exectuors.fixedThreadPool, а полученную Future завернуть в корутину 
 + 
 +При использовании async действия должны выполняться асинхронно 
 +<code java> 
 +val m = CoroutinesMapImpl<String, String>(10) 
 +runBlocking { 
 +  val a = async { m.put("Moscow", "very big city") } 
 +  val b = async { m.put("Rostov", "city") } 
 +  print(a.await()); 
 +  print(b.await()); 
 +
 +</code> 
 + 
 +Если не использовать async, то каждое действие будет блокироваться до получения результата 
 +<code java> 
 +val m = CoroutinesMapImpl<String, String>(10) 
 +runBlocking { 
 +  val a = m.put("Moscow", "very big city"
 +  val b = m.put("Rostov", "city"
 +  print(a); 
 +  print(b); 
 +
 +</code>
  
  
courses/high_performance_computing/coroutines_map.txt · Last modified: 2020/06/08 00:58 by odoronin