Pull to refresh
25
0
Алексей Кайгородов @rfq

JavaSE developer

Send message

Анатомия backpressure в реактивных потоках

Reading time 7 min
Views 12K
Читая многочисленные статьи по теме реактивных потоков, читатель может прийти к выводу, что:

  • backpressure это круто
  • backpressure доступно только в библиотеках, реализующих спецификацию reactive streams
  • эта спецификация настолько сложна, что не стоит и пытаться ее реализовать самому

В этой статье я попытаюсь показать, что:

  • backpressure — это очень просто
  • для реализации асинхронного backpressure достаточно сделать асинхронный вариант семафора
  • при наличии реализации асинхронного семафора, интерфейс org.reactivestreams.Publisher реализуется в несколько десятков строк кода
Читать дальше →
Total votes 3: ↑3 and ↓0 +3
Comments 7

Асинхронное программирование на примерах: реконструкция методов java.util.concurrent.CompletableFuture

Reading time 7 min
Views 19K

Для чего нужна реконструкция, если исходный код этого класса открыт?


Хотя бы потому, что там под капотом высокооптимизированный, трудночитаемый код, изучение которого мало что дает в педагогическом плане.


Поэтому мы воссоздадим семантику операций по их спецификациям, и напишем функционально эквивалентный, понятный и читаемый код, хотя, возможно, и не самый экономный по расходу памяти и времени процессора.

Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 0

Путеводитель по методам класса java.util.concurrent.CompletableFuture

Reading time 7 min
Views 89K
Появившийся в Java8 класс CompletableFuture — средство для передачи информации между параллельными потоками исполнения. По существу это блокирующая очередь, способная передать только одно ссылочное значение. В отличие от обычной очереди, передает также исключение, если оно возникло при вычислении передаваемого значения.

Класс содержит несколько десятков методов, в которых легко потеряться. Данная статья классифицирует эти методы по нескольким признакам, чтобы в них было легко ориентироваться.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 13

Распараллеливание с минимальными правками в коде

Reading time 1 min
Views 12K
Пусть у вас есть метод, вызываемый во многих местах, и вызов которого хочется сделать параллельным. Это можно сделать, не меняя код вызова метода и код самого метода. Нужно только создать расширение объемлющего класса, и изменить код создания объекта.

Было:
class Service {
  public void longJob(Object arg) {...}
}
...
Service s=new Service();
...

s.longJob(arg);


Стало:
class Service {
  public void longJob(Object arg) {...}
}
class ServiceWrapper extends Service {
...
}
...
Service s=new ServiceWrapper() ;
...

s.longJob(arg);

Читать дальше →
Total votes 37: ↑22 and ↓15 +7
Comments 37

Акторы как частный случай dataflow

Reading time 1 min
Views 1.4K
Тема акторов в последние годы набирает популярность и некоторым авторам представляется как хит
сезона, хотя само понятие уходит корнями в 70 годы. Особенно усердствуют эрланговцы — одни
заголовки чего стоят — На передовой дизайна виртуальных машин, прямо-таки вспоминаются заголовки советских газет.
Читать дальше →
Total votes 14: ↑2 and ↓12 -10
Comments 4

Как работает многозадачность

Reading time 2 min
Views 7.8K
В ответ на Как вы считаете, как работает многозадачность на 80386?. По моему мнению, ни один из предлагавшихся вариантов ответа не верен, а верен такой:

Процессор ничего не знает ни о потоках, ни о процессах. Он просто последовательно выполняет инструкции, пока не случится прерывание. Обработка прерывания сводится к вызову процедуры, не заданному в исполняемом коде. Эта процедура (являющаяся частью операционной системы) производит при необходимости переключение процессов и потоков. Чаще всего процедура прерывания просто делает выход и прерванный поток продолжает свою работу, ничего не заметив.
Читать дальше →
Total votes 93: ↑63 and ↓30 +33
Comments 48

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity